我如何 'convert' 字母转数字?

How do I 'convert' letters to numbers?

我正在编写一个将常规银行帐号转换为 IBAN 号码的程序。此过程的一部分意味着我需要将字母(在 Bank-ID、Branch-ID 和 ISO-Country-CODE 等字段中)转换为与其在字母表中的位置对应的数字 + 9。所以 A=10,B=11 , Z=35。

所以基本上,以下银行 ID:"LOYD" 将变为“21243413”。

稍后我需要将这些数字放入一个字符串中,以便用它进行计算。

现在,如果输入的 bank-ID 总是等长且总是字母,我会把它放在我剩余的工作存储中:

LETTERS    PIC X(36) VALUE '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

然后我会这样写:

INITIALIZE BANK-CODE-NR
           PERFORM VARYING LOOP-COUNTR FROM 1 BY 1 UNTIL
                           LOOP-COUNTR > 4
           INSPECT         LETTERS
           TALLYING        BANK-CODE-NR(LOOP-COUNTER)  FOR
                           CHARACTERS BEFORE INITIAL BANK-CD IN
                           COPYBOOK(LOOP-COUNTR:1)
           END-PERFORM

但在这种情况下,银行 ID 可能有四个位置长,甚至更长。另外,我正在处理 PIC N 字段,这意味着 INSPECT 不起作用。

编辑以获取额外信息

我正在使用一本包含国民的字帖。 它的结构如下:

     01 Input-IBAN.
          05 COUNTRY-CODE               PIC N(02).
          05 BANK-ID                    PIC N(10).
          05 BRANCH-ID                  PIC N(10).
          05 ACCOUNT-NR                 PIC N(28). 
          05 Output-IBAN                PIC N(34).

这是一个被调用的程序。

IDENTIFICATION DIVISION.
PROGRAM-ID. Q36201076.
AUTHOR. Magoo.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
WORKING-STORAGE SECTION.
01 LETTERS.
   03 LETTER-STRING                   PIC X(36) VALUE
                     "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".
   03 FILLER REDEFINES LETTER-STRING.
      05 LETTER-CHARACTER             PIC X(01) OCCURS 36.

01 BANK-CODE.
   03 BANK-CODE-CHARACTER             PIC X(01) OCCURS 4.

01 BANK-CODE-CONVERTED.
   03 BANK-CODE-NUMBER                PIC 9(02) OCCURS 4.

01 wORK-VARIABLES.
   03 LETTER-INDEX                    PIC 9(02).
   03 BANK-INDEX                      PIC 9(01).
   03 REPLACED-COUNT                  PIC 9(01) VALUE 0.

PROCEDURE DIVISION.
MAIN-RTN.
    MOVE "LOYD"       TO BANK-CODE.
    PERFORM
      VARYING LETTER-INDEX FROM 1 BY 1
      UNTIL (LETTER-INDEX > 36) OR (REPLACED-COUNT = 4)
      PERFORM
        VARYING BANK-INDEX FROM 1 BY 1
        UNTIL (BANK-INDEX > 4) OR (REPLACED-COUNT = 4)

      IF BANK-CODE-CHARACTER(BANK-INDEX) = LETTER-CHARACTER(LETTER-INDEX)
        SUBTRACT 1 
          FROM LETTER-INDEX 
                        GIVING BANK-CODE-NUMBER(BANK-INDEX)
        ADD 1               TO REPLACED-COUNT
      END-IF
      END-PERFORM
    END-PERFORM.

    DISPLAY BANK-CODE "-->" BANK-CODE-CONVERTED.
    ACCEPT BANK-CODE.
    STOP RUN.

没什么特别复杂的。简单的重新声明。