440 IF A(G) >0 THEN 480
Начиная с первого бита в 1, программа PARITY.BAS применяет определенные правила для проверки четности блоков данных по пять бит, затем по семь бит. При отсутствии ошибки это позволяет ей четко отличать файлы, закодированные пятиразрядным кодом ANSI, от закодированных семиразрядным кодом ANSI. Пока ошибка не обнаружена, программа выдает группы, успешно прошедшие проверку, и останавливается на первом символе с ошибкой, иначе говоря, на первой группе по пять или семь бит, содержащей четное число единиц.
Конечно, если проверки по пять бит и по семь бит окончились неудачей еще до конца файла, нельзя сразу сделать вывод. Необходим более тщательный анализ. Начать, если это возможно, следует с нового считывания карты.
В общем, эта программа позволит убедиться в отсутствии ошибки четности в любом файле .CAR.
Ниже представлен результат проверки файла TEST5.CAR (его можно найти на сайте www.dmk.ru) закодированного пятиразрядным кодом и не имеющего никаких ошибок четности. Следует обратить внимание, что нули запуска и заполнения представлены в сокращенной форме.
Теперь покажем результат той же самой проверки, на этот раз проведенной с файлом 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 — старый и новый. Каждый идентичный бит обозначается тире, а каждый отличающийся — звездочкой, что сразу дает представление о масштабе возможного несоответствия. Нули запуска и заполнения, как известно, представляются в сокращенном виде, поскольку они исключены из процесса проверки. Их число может несколько изменяться от одного до другого считывания той же самой карты.
Читать дальше