Шрифт:
Теперь покажем результат той же самой проверки, на этот раз проведенной с файлом TEST7.CAR, закодированным семиразрядным кодом и также не имеющим никаких ошибок.
Мы не написали программу, предназначенную для проверки на этой стадии считывания символов LRC, которые обычно заканчивают каждую дорожку. Наша цель на данный момент заключается в обнаружении самых грубых ошибок, которые могли бы нарушить процесс считывания.
При возникновении настоятельной необходимости в проверке LRC можно обратиться к программе LRCMAG.BAS из главы 4. Эта программа предназначена для использования в ходе операций кодирования, но вполне годится и после считывания, за которым следует декодирование.
Вот еще одна проверка, которую удобно проводить с файлом .CAR, но только после его декодирования. Речь идет не о серии битов, а о числе, состоящем из некоторого количества цифр помимо битов заполнения.
Например, в случае файла VISA.CAR необходимо произвести проверку только одной части информации, декодирование которой представлено в главе 2, где речь идет о содержимом дорожки ISO 2 банковской карточки. В данном случае это 16-значный номер карточки: 4970101234567890.
Программа LUHNCHK.BAS работает с числами, состоящими из любого количества цифр, как четного, так и нечетного.
10 REM — LUHNCHK.BAS —
20 KEY OFF: CLS
30 CLEAR: PRINT: PRINT "введите номер карты": INPUT N$
40 L=LEN(N$):DIM N(L)
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 170
90 T=0: FOR F=2 TO L — 1 STEP 2
100 C=2*N(F): IF C>=10 THEN C=C-9
110 T=T+C: NEXT F
120 FOR F=1 TO L STEP 2
130 T=T+N(F): NEXT F
140 IF T>=10 THEN T=T-10: GOTO 140
150 IF T=0 THEN PRINT "номер действителен": GOTO 30
160 PRINT "номер не действителен": GOTO 30
170 T=Q: FOR F=1 TO L-1 STEP 2
180 C=2*N(F): IF C>=10 THEN C=C-9
190 T=T+C: NEXT F
200 FOR F=2 TO L STEP 2
210 T=T+N(F): NEXT F
220 GOTO 140
230 REM (c)1996 Patrick GUEULLE
В данном случае ответ будет номер не действителен, потому что мы, естественно, использовали номер несуществующей кредитной карточки. С другой стороны, ничто не мешает произвести такую проверку с вашей банковской карточкой, номер которой должен быть действительным.
Поскольку магнитная технология допускает практически неограниченные возможности стирания информации (штатного или нештатного), а также многократную запись, то важно иметь возможность проверять, не изменилось ли содержимое той или иной дорожки.
Это очень просто сделать путем архивирования файла .CAR — того, который послужил для кодирования карты (мы еще к этому вернемся), либо того, который был создан при «реперном» считывании.
Программа VERMAG.BAS позволяет сравнить не две карты, а два файла .CAR — старый и новый. Каждый идентичный бит обозначается тире, а каждый отличающийся — звездочкой, что сразу дает представление о масштабе возможного несоответствия. Нули запуска и заполнения, как известно, представляются в сокращенном виде, поскольку они исключены из процесса проверки. Их число может несколько изменяться от одного до другого считывания той же самой карты.
10 REM — VERMAG.BAS —