Читаем Магнитные карты и ПК полностью

2140 IF C$="00010" THEN PRINT "8";

2150 IF C$="10011" THEN PRINT "9";

2170 RETURN

3000 REM (c) 1996 Patrick GUEULLE

Программа LECTISО2.BAS — основная программа, которую вы будете использовать для считывания дорожки ISO 2 стандартных магнитных карт. Если LECT75.EXE присутствует в текущей директории (наряду с COMMAND.COM), то любое прохождение читаемой карты (в правильном направлении) должно привести к отображению 240 считанных бит и соответствующих цифровых данных.

Ниже показано, что это дает в конкретном случае с файлом TEST5.CAR, представленным на сайте www.dmk.ru. Так, файл TEST5.CAR, декодированный с помощью программы LECTISО2.BAS, будет иметь следующий вид:

Одновременно создается файл CARTE.CAR, который нетрудно переименовать в DOS (командой REN), если есть желание его сохранить. Ни один из тестов (на четность или LRC) не производится.

Такие проверки можно осуществить по запросу при необходимости (дальше будут представлены соответствующие программы). Однако при этом существует риск сбоя в считывании некоторых нестандартных карт.

При отображении данных, записанных на дорожке, используются не стандартные «кабалистические* знаки, представленные выше в виде пяти- и семибитного кода ANSI, а знаки в более наглядной форме:

• флажок начала: {start};

• разделитель полей: {sep};

• флажок конца: {end};

• специальные знаки: {10}, {12} и {14}.

Внимание: не путайте эти фигурные скобки с простыми!

Считывание дорожки ISO 1

Работать с дорожкой ISO 1 несколько сложнее, поскольку обычно она записана с плотностью 210 bpi и содержит семиразрядные коды алфавитно-цифровых символов.

Осуществить считывание позволяет программа LECT210.PAS, которая работает аналогично LECT75.PAS. Ее исполняемая версия (LECT210.EXE) может использоваться либо самостоятельно для создания файла CARTE.CAR на 630 бит, либо вызываться из другой программы в оболочке Basic.

Отметим, что 630 бит — это 90 раз по 7 бит, то есть они соответствуют 79 знакам, которые максимально может содержать дорожка ISO 1, плюс 77 нулей заполнения.

10 REM — LECTISO1.BAS —

20 KEY OFF: CLS: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT: PRINT

30 SHELL "LECT210.EXE"

40 OPEN "carte.car" FOR INPUT AS #1

50 DIM T(630)

60 FOR F=1 TO 630

70 INPUT#1,T(F)

80 NEXT F

90 J=1

100 IF T(J)<>1 THEN 160

110 IF T(J+1)<>0 THEN 160

120 IF T(J+2)<>1 THEN 160

130 IF T(J*3)<>0 THEN 160

140 IF T(J+4)<>0 THEN 160

141 IF T(J+5)<>0 THEN 160

142 IF T(J+6)<>1 THEN 160

150 K=J: GOTO 200

160 J=J+1:GOTO 100

200 C$=""

210 FOR F=0 TO 6

220 IF T(K+F) =0 THEN C$=C$+"0"

230 IF T(K+F)=1 THEN C$»C$+"1"

240 NEXT F

250 GOSUB 2000

260 K=K+7: IF K>623 THEN END

270 GOTO 200

2000 IF C$="1010001" THEN PRINT "{start}"

2010 IF C$="0111110" THEN PRINT "{sep}"

2020 IF C$="1111100" THEN PRINT "{end}"

2030 IF C$="0000001" THEN PRINT " ";

2031 IF C$="1000000" THEN PRINT "{1H}";

2032 IF C$="0100000" THEN PRINT "{2H}";

2033 IF C$="1100001" THEN PRINT "{3H}";

2034 IF C$="0010000" THEN PRINT "{4H}";

2036 IF C$="0110001" THEN PRINT "{6H}";

2037 IF C$="1110000" THEN PRINT "{7H}";

2038 IF C$="0001000" THEN PRINT "{8H}";

2039 IF C$="1001001" THEN PRINT "{9H}";

2040 IF C$="0101001" THEN PRINT "{AH}";

2041 IF C$="1101000" THEN PRINT "{BH}";

2042 IF C$="0011001- THEN PRINT "{CH}";

2043 IF C$="1011000- THEN PRINT "{DH}";

2044 IF C$="0111000" THEN PRINT "{EH}";

2045 IF C$="1111001" THEN PRINT "{FH}";

2060 IF C$="0000100" THEN PRINT "0";

2070 IF C$="1000101" THEN PRINT "1";

2080 IF C$="0100101" THEN PRINT "2";

2090 IF C$="1100100" THEN PRINT "3";

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже