Программа CREMAG.BAS выполняет функцию, прямо противоположную функции программы DEC5.BAS в том смысле, что она трансформирует цифровые данные в файл .CAR, готовый к записи и включающий нули запуска и заполнения.
10 REM — CREMAG.BAS —
20 KEY OFF: CLS
30 PRINT "Ввести данные, предназначенные для записи,"
40 PRINT "затем нажать ENTER"
50 А$=""
60 INPUT В$
70 IF В$ = "" THEN 100
80 А$=А$+В$
90 GOTO 60
100 C$="0000000000"
110 FOR F=1 ТО LEN(A$)
120 IF MID$(A$,F,1)="0" THEN C$=C$+"00001": GOTO 240
130 IF MID$(A$,F,1)="1" THEN C$=C$+"10000": GOTO 240
140 IF MID$(A$,F,1)="2" THEN C$=C$+"01000": GOTO 240
150 IF MID$(A$,F,1)="3" THEN C$=C$+"11001": GOTO 240
160 IF MID$(A$,F,1)="4" THEN C$=C$+"00100": GOTO 240
170 IF MID$(A$,F,1)="5" THEN C$*C$+"10101": GOTO 240
180 IF MID$(A$,F,1)="6" THEN C$=C$+"01101": GOTO 240
190 IF MID$(A$,F,1)="7" THEN C$=C$+"11100": GOTO 240
200 IF MID$(A$,F,1)="8" THEN C$=C$+"00010": GOTO 240
210 IF MID$(A$,F,1)="9" THEN C$=C$+"10011": GOTO 240
220 IF MID$(A$,F,1)=" {" THEN 370
230 PRINT: PRINT "Данные не действительны (запрещенные СИМВОЛЫ)": ВЕЕР: END
240 NEXT F
250 IF LEN(C$)<=210 THEN 270
260 PRINT: PRINT "Данные слишком длинные (максимум 40 цифровых символов)": END
270 C$="0"+С$
280 IF LEN (C$) =240 THEN 320
290 C$=C$+"0"
300 IF LEN(C$)=240 THEN 320
310 GOTO 270
320 OPEN "carte.car" FOR OUTPUT AS #1
330 FOR F=1 TO LEN(C$)
340 PRINT#1,MID$(C$,F,1)+CHR$(32);
350 NEXT F
360 CLS: PRINT: PRINT "Файл CARTE.CAR готов": BEEP: END
500 IF MID$(A$,F,1)<>T THEN 230
510 GOTO 240
520 REM (c)1996 Patrick GUEULLE
Как и программа MAGWRITE, CREMAG предназначена для кодирования дорожки ISO 2 и, следовательно, будет обрабатывать только цифровые данные. Разделительные символы воспринимаются именно в том виде, в каком их отображает DEC5, то есть в фигурных скобках (а не в простых круглых скобках или кавычках).
Так, флажок старта будет записан как {start}, флажок конца как {end}, разделитель полей как {sep}.
Перейти на новую строку можно путем однократного нажатия на клавишу ENTER. Создание файла .CAR инициируется двукратным нажатием этой клавиши.
Количество кодируемых данных значения не имеет, если не превышается максимум, отведенный дорожке ISO 2. Нули заполнения автоматически записываются в начале и конце дорожки, чтобы отцентровать блок информационных битов.
При необходимости записать на карте последовательности цифр, то есть некие числовые данные, которые могут оказаться номерами банковских счетов (не исключено), возникает проблема обеспечения безопасности. Как мы уже знаем, эту проблему можно решить путем добавления контрольного ключа, рассчитываемого по стандартному алгоритму, которого придерживаются практически все производители карт.
Программа LUHN.BAS способна рассчитать эту дополнительную цифру вне зависимости от количества цифр (четного или нечетного) номера, который требуется защитить.
10 REM — LUHN.BAS —
20 KEY OFF: CLS
30 CLEAR: PRINT: PRINT "Введите цифровые данные, которые требуют обеспечения безопасности": INPUT N$
40 L=LEN(N$): DIM N(L+1)
50 FOR F=1 TO L
60 C$=MID$(N$,F,1): C=VAL(C$): N(F)=C
70 NEXT F
80 IF (L/2) — INT(L/2) =0 THEN 200
90 T=0: FOR F=1 TO L STEP 2
100 C=2*N(F): IF C>=10 THEN C=C-9
110 T=T+C: NEXT F
120 FOR F=2 TO L-1 STEP 2
130 T=T+N(F): NEXT F
140 IF T>=10 THEN T=T-10: GOTO 140
150 N=10-T: IF N=10 THEN N=0
160 N(L+1)=N
170 CLS: FOR F=1 TO L+1
180 PRINT N(F);: NEXT F
190 PRINT: GOTO 30
200 T=0: FOR F=2 TO L STEP 2
210 C=2*N(F): IF C>=10 THEN C=C-9
220 T=T+C: NEXT F
230 FOR F=1 TO L-1 STEP 2
240 T=T+N(F):NEXT F
250 IF T>=10 THEN T=T-10: GOTO 250
260 N=10-T: IF N=10 THEN N=0
270 GOTO 160
280 REM (c)1996 Patrick GUEULLE
Определенный таким образом ключ добавляется в конце защищаемого номера. Полученная при этом последовательность цифр успешно проходит проверку, производимую программой LUHNCHK (см. главу 3).
Это дает читателям возможность проверить (при повторном считывании) целостность данных, которые они закодировали на своих картах.
Символ LRC в принципе должен кодироваться после флажка end каждой дорожки вслед за проверкой нечетности и расчетом контрольного ключа с целью обеспечения последнего уровня безопасности.
Программа LRCMAG.BAS, как и CREMAG, ждет введения с помощью клавиатуры всех данных, начиная с флажка start и до флажка end включительно.
10 REM — LRCMAG. BAS —
20 KEY OFF: CLS
30 PRINT "Введите данные для кодирования"
40 PRINT "затем нажать ENTER"
50 А$=""
60 INPUT В$
70 IF В$ = "" THEN 100
80 А$=А$+В$
90 GOTO 60
100 C$=""
110 FOR F=1 TO LEN(A$)
120 IF MID$(A$,F,1)="{" THEN 300