Самый простой считыватель магнитных карт

Tomcat

Professional
Messages
2,382
Reputation
4
Reaction score
407
Points
83

Л. Падилья​


Предисловие​

Основная цель всех дизайнов, которые вы найдете на этих страницах, — сделать их максимально простыми в работе. Когда я впервые сделал считыватель магнитных полос, у меня к тому времени еще не было звуковой карты, поэтому мне пришлось сконструировать простой усилитель, чтобы поднять слабый сигнал магнитной головки до уровня, пригодного для использования компьютером. Сейчас звуковые карты распространены даже в ноутбуках, поэтому усилитель больше не нужен, достаточно просто подключить магнитную головку напрямую к микрофонному входу звуковой карты (сопротивления обоих устройств обычно одинаковы). Конечно, вам все равно понадобится механическое устройство для считывания карты, которое я описываю на своей странице для чтения. Если вы хотите читать карты с магнитной полосой с помощью компьютера без звуковой карты, вы все равно можете использовать мое оригинальное устройство чтения.

Настройка​

Как я уже говорил выше, если у вас есть компьютер со звуковой картой с микрофонным входом (все известные мне карты имеют такой вход), вам понадобится только магнитная головка для чтения карт с магнитной полосой. Головку следует выбирать так, чтобы размер дорожки соответствовал размеру магнитной полосы. Я обнаружил, что размер дорожки обычного монофонического кассетного проигрывателя немного меньше требуемого, но он работает хорошо. Использование стереофонической головки не рекомендуется, но, скорее всего, это сработает, если вы используете только одну из двух дорожек. Я использую тонкий кабель витой пары длиной 1,5 метра для подключения монофонической аудиоголовки к разъему микрофона с помощью разъема моноразъем. Если один из контактов магнитной головки подключен к ее корпусу, необходимо соединить этот контакт с землей, то есть со стороны разъема, ближайшей к кабелю (задняя часть). Теперь вам нужно только какое-то механическое устройство, чтобы провести карту, см. мою первую страницу для чтения , чтобы узнать о конкретном дизайне.

Некоторые звуковые карты имеют стереоразъем для микрофонного входа, обеспечивающий постоянный ток около +5 В в среднем разъеме (кольцо разъема), хотя я видел по крайней мере одну карту с выходом +5 В во внешнем разъеме (кончик разъема). подробности см. здесь . Если использовать разъем mono jack (наконечник и кольцо закорочены вместе), то этот постоянный ток подается на магнитную головку и его может быть достаточно для стирания магнитных полос (у меня так было с одной звуковой картой, я стер случайно пару магнитных полоски при попытке их считывания), поэтому вы можете рассмотреть возможность добавления конденсатора (около 200 нФ должно быть достаточно) последовательно с головкой, чтобы избежать этого постоянного тока. Конечно, вы можете использовать стереоразъем и оставить кольцо (или наконечник) открытым, но в любом случае рекомендуется измерить напряжение перед подключением магнитной головки, чтобы убедиться, что при подключении головки не будет постоянного тока.

Чтобы читать данные с помощью моего программного обеспечения, вам понадобится Linux, работающий на вашем компьютере, и звуковая карта, настроенная для использования. Вам также понадобится компилятор C, утилита sox , микшер (aumix, kmix, gmix, xmixer, asmixer, ...) и оболочка C, не волнуйтесь, все эти утилиты включены в любой дистрибутив Linux. Программное обеспечение, которое я написал, состоит из сценария оболочки (не забудьте активировать разрешение на выполнение, загрузка удалит его) и программы на C , которую вам придется скомпилировать (инструкции см. в исходном коде). Конечно, вы можете разработать свою собственную программу для чтения данных, например, с помощью Windows (для этой платформы доступен sox), но, пожалуйста, не просите меня сделать это. Если у вас нет и вы не хотите устанавливать Linux (вы не знаете, чего вам не хватает ;-), у вас все равно есть возможность запустить Linux на компакт-диске и использовать мои программы, см. мою страницу, посвященную запуску Linux без его установки. На самом деле у меня есть подготовленный ISO-образ Knoppix размером 700 МБ, который содержит исходные коды и скомпилированные двоичные файлы. Инструкции см. на указанной странице .

Использование программного обеспечения​

После того, как вы скомпилировали программу C, поместите ее в путь выполнения (это может быть текущий каталог, если он у вас есть в переменной среды PATH) и подключите магнитную головку к микрофонному входу звуковой карты, тогда вам просто нужно запустить сценарий оболочки и проведите карту. При запуске программы она ожидает активности в потоке звуковых данных, то есть считывания карты. Когда активность прекращается, программа начинает декодировать биты, формировать байты и проверять четность и LRC. Проведение карты повышает уровень звука по сравнению с шумом, и это действие, которое обнаруживает программа. После свайпа скрипт позволяет провести свайп еще раз (в случае, если считывание не удалось) или выйти.

Скрипт пытается установить настройки микшера звуковой карты на соответствующие значения с помощью программы aumix. Если эта утилита не установлена в вашей системе или скрипт не устанавливает правильные значения (названия каналов могут отличаться от карты к карте), вам придется настроить микшер вручную, используя ваш любимый микшер. Необходимые настройки – выбрать канал микрофона в качестве источника записи и установить его усиление на максимальный уровень. Также может потребоваться установка канала записи на максимальный уровень. В случае сомнений просто поднимите все каналы до максимального уровня. Если у вас есть динамик, подключенный к звуковой карте, и правильно настроенный микшер, вы будете слышать данные, как в модеме. Это очень интересно, потому что звук очень помогает расположить голову над треком: чем выше звук, тем лучше положение. Это также позволит вам различать треки с высокой и низкой плотностью: первый тип имеет более резкий звук, чем второй, когда вы проводите по ним с одинаковой скоростью. Пока стандартные карты чередуют дорожки с высокой и низкой плотностью, это дополнительная помощь в позиционировании головы на дорожке.

Программа поддерживает следующие опции, которые обычно вам не нужны, за исключением выбора трека:
  • -t <дорожка>: тип дорожки для чтения, допустимые значения от 1 до 4, по умолчанию — 2. Эта опция выбирает несколько параметров, соответствующих каждой дорожке, некоторые из которых можно изменить с помощью других опций. Значения от 1 до 3 соответствуют трем стандартным дорожкам, а значение 4 является экспериментальным и предназначено для использования с нестандартными дорожками. Используя эту дорожку 4, программа не ищет начальный и конечный сигнал, а также не проверяет четность и LRC. Он также декодирует биты немного иначе, чем стандарт: 0 — то же самое, но 1 — это только одно короткое разворот потока, а не два коротких последовательных разворота, как в стандарте. Такое нестандартное кодирование битов я нашел как минимум в одной карте (карте копировального аппарата).

  • -c <clk_bits>: количество ведущих битов синхронизации, значение по умолчанию зависит от выбранной дорожки. Это количество начальных битов, которые принудительно равны 0 (или 1, если указана опция -i, см. ниже), а их средняя длительность используется в качестве ссылки для декодирования остальных битов.

  • -p <peak_points>: минимальное количество последовательных точек данных, которые должен иметь пик данных, значение по умолчанию зависит от выбранной дорожки. Это сделано для того, чтобы избежать пиков шума, которые обычно невелики, однако слишком большое значение может иметь нежелательный эффект, поскольку при наличии большого шума хорошие пики данных могут быть не найдены.

  • -s <stop_points>: Минимальное количество последовательных точек данных ниже порога шума (см. ниже), прежде чем программа прекратит принимать данные и начнет декодировать биты. Значение по умолчанию — 500, что составляет около 10 миллисекунд. Некоторые нестандартные карты имеют треки с несколькими записями, разделенными паузой, без данных, возможно, вам придется изменить этот параметр, если вы обнаружите одну из таких карт с большой паузой.

  • -l <порог>: минимальный уровень сигнала, который считается данными, ниже этого значения мы считаем его шумом. По умолчанию в качестве меры уровня шума используются первые 100 миллисекунд данных (в течение которых мы ожидаем, что прокрутки еще не будет). При использовании шумных звуковых карт лучше установить порог вручную, используя эту опцию. Не используйте эту опцию при первом запуске моей программы и обратите внимание на значение, помеченное как «среднее значение шума» на экране (см. пример ниже). Если оно не равно нулю, это означает, что существует постоянный ток, и его может быть достаточно, чтобы сотрите карту, пытаясь ее прочитать. Поэтому лучше проверьте это перед чтением любой карты, и если вы обнаружите, что у вас есть постоянный ток, добавьте конденсатор последовательно с магнитной головкой, чтобы избежать этого (см. Выше). Обратите внимание, что у вас может быть постоянный ток даже в том случае, если «среднее значение шума» равно нулю, если усилитель звуковой карты подключен к конденсатору, поэтому лучше все равно проверить его с помощью вольтметра.

  • -m <s|p|z> : Метод распознавания битов, т.е. их начала и конца, чтобы можно было установить их продолжительность и, следовательно, их природу. Сначала я разработал метод наклона (s), затем перешел к новому алгоритму пика (p), который считаю более надежным, и оставил старый метод по историческим причинам. Есть третий метод — алгоритм пересечения нуля (z), который мне пришлось реализовать для декодирования карт, записанных на мой мобильный телефон. Я не знаю, почему разные усилители видят магнитные полосы по-разному. Если у вас возникли проблемы с чтением карт с помощью этой программы, сначала попробуйте определить, какой метод лучше работает с вашей звуковой картой. Пиковый метод (p) используется по умолчанию.

  • -d: вывести необработанные данные на стандартный вывод (чтобы использовать карту в качестве цифрового осциллографа), которые можно использовать с инструментами анализа данных для просмотра того, что происходит. Это помогает найти схему кодирования нестандартных дорожек. Если вы используете эту опцию, вам придется перенаправить вывод, чтобы сохранить данные.

  • -b: вывести декодированные биты на стандартный вывод. Используя эту опцию, вы можете подсчитать количество ведущих битов синхронизации. В следующий раз, когда вы будете читать эту карту, вы можете использовать это число для параметра тактовых битов, но это имеет смысл только в том случае, если оно меньше числа по умолчанию или намного выше. Установка правильного количества битов синхронизации повышает вероятность успешного декодирования карты.

  • -n: не прекращать декодирование байтов после LRC. Программа предполагает, что LRC — это последний байт потока данных, но некоторые карты, например посадочные талоны, имеют две или три записи, разделенные битами синхронизации.

  • -i: биты обратной синхронизации, они будут 1 вместо 0. Такое нестандартное поведение я обнаружил по крайней мере в одном типе карт — билетах мадридского метро.

  • -x: строгое обнаружение, по умолчанию пики данных не обязаны превышать порог шума, этот уровень используется только для определения того, когда поток данных начинается и заканчивается. Это сделано для того, чтобы избежать некоторых эффектов ограничения, которые иногда случаются, скрывая истинные пики данных ниже порогового значения, особенно если последний высок. Однако при наличии большого количества шума может быть удобно использовать эту опцию, чтобы уменьшить вероятность принятия пиков шума за пики данных. В этих условиях также может помочь использование параметра -p (см. выше).

После того, как вы прочитали трек, на экране появятся байты и некоторые информативные данные о качестве чтения, их можно использовать для позиционирования головы на треке (а также для прослушивания звука), чем выше данные макс. и среднеквадратичной амплитуды, тем лучше. Я обнаружил, что оптимальное время пролистывания составляет около 0,2 секунды для дорожек стандартного размера с низкой плотностью и около 0,4 секунды для дорожек с высокой плотностью. Свайп должен быть максимально плавным и равномерным, иначе программа ошибочно интерпретирует 0 как 1 и наоборот. Как только вы поймете ритм смахивания, вы начнете читать треки с первого пролистывания. В общем, вам следует ознакомиться с исходным кодом, чтобы понять, как он работает. Это поможет вам интерпретировать информацию, отображаемую на экране после пролистывания, и позволит вам изменить код в соответствии с вашими конкретными требованиями или в случае, если вы найдете редкие карты.

Некоторые результаты​

Это аспект пролистывания (необработанных данных) во времени для дорожек с высокой и низкой плотностью (нажмите на изображения, чтобы увеличить):
datahigh.jpg


datalow.jpg


Это более пристальный взгляд на начало данных (ведущие биты синхронизации):
clockhigh.jpg


clocklow.jpg


А это первые данные после битов тактирования (начальный сигнал):
ssenhigh.jpg


ssenlow.jpg


Эти графики были созданы с помощью инструмента анализа данных под названием PAW от CERN, который вы можете скачать бесплатно (включая полное руководство) и доступен для многих платформ (включая Windows). Если вы попробуете, этот макрос будет полезен, как и эта функция, подобная FORTRAN (необходимая для макроса), для декодирования редких карт.

В заключение, вот вывод программы (с опциями -b -t 1) после чтения стандартного трека IATA (посадочный талон Spanair):

Параметр битов синхронизации неверный или отсутствует, используется значение по умолчанию: 60.
Неверный параметр длительности пика или его отсутствие, используется значение по умолчанию: 4.
Неправильный параметр продолжительности остановки или его отсутствие, используется значение по умолчанию: 500.
Нет параметра метода, используется значение по умолчанию: пик.
Читаю трек 1.
Неверный или отсутствующий параметр порогового уровня, используя данные...
Максимальная/средняя/среднеквадратическая амплитуда шума: 0,003/0,000/0,001
Порог: 0,012
Время прокрутки: 0,267 с
Максимальная/средняя/среднеквадратическая амплитуда данных: 0,628/-0,000/0,210
Биты: 490, индивидуальная длительность: 0,545 мс.
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000111101 10000000100000010000001110011100001111100010010101011010110000001000110111000101011010000000010000001101101100000010100101 1000101100110000000010100101000010010100100000001000000100000010000001000000100000010000001000000100000010000001000000100 0000100000010000001000000100000011111110011000010000000000000000000000000000000000000000000000000000000000000000000000000 000000
Начальный дозорный найден
%W SPCJK 816 M 219 20E ?
Конечный дозорный найден
ЛРК ОК.
 
Top