BadB
Professional
- Messages
- 2,563
- Reaction score
- 2,760
- Points
- 113
В Википедии есть много документации по ISO8583, так что делать это снова не имеет смысла. Однако я хочу использовать другой подход, более прагматичный и более программный.
1 Что это такое
Сообщение ISO8583, с точки зрения разработчика, представляет собой сообщение TCP / IP, содержащее некоторое количество байтов. Учитывая, что это сообщение TCP / IP, оно будет иметь 2 байта данных в начале, чтобы указать длину последующего сообщения. Затем сообщение, длина которого указана в 2-байтовом заголовке. С этого момента мы будем называть это тело сообщением.
2 Как это выглядит
Похоже на массив байтов. Сообщение начинается после 2-байтового TCP-заголовка, упомянутого выше.
С этого момента мы ожидаем такую структуру данных:
1. Заголовок фиксированной длины разделен на несколько полей, и это необязательно. В документации это должно быть указано, если таковая существует.
2. Растровое изображение 16 байт, в общем. Этот битовый массив представляет собой массив из 8, 16 или 32 байтов, который необходимо преобразовать в его двоичную форму. У нас получается двоичный массив типа 01101010010001 ... Позже я расскажу, как его читать.
3. Последовательность полей, обычно называемых «элементами данных», пронумерованных от 2 до 128, которые, как следует из названия, несут данные сообщения.
Вот и все, так выглядит сообщение в его наиболее распространенной форме, и оно заканчивается после длины, указанной в заголовке TCP.
3 Как вы читаете сообщения ISO8583 из сети
1. Вы читаете заголовок TCP, 2 байта. Это говорит вам, сколько байтов нужно прочитать в сообщении, например, 552 байта.
2. Прочтите 552 байта данных, проанализируйте сообщение.
3. Повторяйте шаги 1-2 до бесконечности;
4 Как вы анализируете сообщения ISO8583
В приведенном выше примере речь идет о 552 байтах. Вы начинаете разбирать эту информацию.
1. Заголовок - это необязательная и фиксированная длина. Если он существует, вам нужно прочитать в него фиксированное количество байтов, например 10 байтов. Обычно этого не существует.
2. Тип сообщения. Фиксированная длина, 4 байта, в большинстве случаев. Прочтите это.
3. Растровое изображение. В большинстве случаев это фиксированная длина 16 байт. Прочтите это, получите двоичное значение. Интерпретируйте это в соответствии с параграфом ниже. Это скажет нам прочитать поля 2, 3, 4, 7, 8, 11, 12, 18, ....
4. Прочтите поля сообщения, указанные в битовой карте, как в примере выше.
Вот и получаются данные в полях.
5 Чтение растрового изображения сообщения
Допустим, у вас есть этот массив растровых изображений, который вы получаете путем преобразования прочитанных байтов растрового изображения в его двоичное представление: 011110010100010001110001111 ...
Проще говоря, вы читаете это так:
Позиция 1, значение равно нулю, означает, что в позиции 1 не будет поля;
Позиция 2, значение равно единице, означает, что на позиции 2 будет поле; Мы должны прочитать Поле 2
Позиция 3, значение равно единице, означает, что на позиции 3 будет поле; Мы должны прочитать Поле 3
Позиция 4, значение равно единице, означает, что в позиции 4 будет поле; Мы должны прочитать Поле 4
Позиция 5, значение равно нулю, означает, что в позиции 5 поля не будет;
Позиция 6, значение равно нулю, означает, что в позиции 6 поля не будет;
Позиция 7, значение равно единице, означает, что на позиции 7 будет поле; Мы должны прочитать Поле 7
И так до 128.
6. Чтение полей ISO8583
Читая растровое изображение выше, мы знаем, какие поля читать, а какие нет.
Прочтите поле 2. Из спецификации мы знаем, как это выглядит. Обычно это LLVAR. Это означает длину 2 байта [LL], а затем значение [VAR], так что это похоже на 161234567890123456. Мы читаем это как длину 16, за которым следует значение: 1234567890123456. Готово, дальше.
Прочтите файл 3. Мы знаем из документа спецификации, как это выглядит. Обычно это фиксированный номер 6. Это означает фиксированный размер 6 байтов. Следующий
Прочтите поле 4. Из спецификации мы знаем, как это выглядит. Обычно это фиксированный 12. Это означает фиксированный размер 12 байт. Следующий
Прочтите поле 7. Видите, мы пропустили 5 и 6, потому что битовая карта сказала, что их нет. Мы знаем из спецификации, как это выглядит. Обычно это фиксированный номер 7. Это означает фиксированный размер 7 байтов. Следующий
И так мы идем до 128 файла.
7 Считывание данных в полях
Для каждого из 128 полей существует несколько довольно стандартных форматов, и обычно в документе спецификации рассказывается, как их интерпретировать.
Обычно это одно из следующих:
1. Фиксированная длина: они определяют тип и длину символов:
a Буквенные символы, от A до Z и от a до z
n Цифровые цифры от 0 до 9
p Pad символ, пробел
s Специальные символы, т. е. другие печатаемые
Буквенные и цифровые символы
как буквенные и специальные символы
ns Числовые и специальные символы
anp Буквенные, цифровые символы и символы клавиатуры
ans Алфавитные, цифровые и специальные символы
7 (7 - примерное число, также может быть 55) Длина поля
2. Длина Defined-Variable, у них 2-5 (обычно) байтов длины, за которыми следует значение
LL Длина следующего элемента переменных данных, от 01 до 99
LLL Длина следующего элемента переменных данных, от 001 до 999
LLLLL Длина следующего элемента переменных данных, от 00001 до 99999
LLLLLL Длина следующего элемента переменных данных, от 000001 до 999999
3. Некоторые другие варианты специальных полей, проприетарных или настраиваемых согласно спецификации, например Track2 Data или EMV.
Это все, если у вас есть вопросы, напишите их ниже, и мы обновим статью.
1 Что это такое
Сообщение ISO8583, с точки зрения разработчика, представляет собой сообщение TCP / IP, содержащее некоторое количество байтов. Учитывая, что это сообщение TCP / IP, оно будет иметь 2 байта данных в начале, чтобы указать длину последующего сообщения. Затем сообщение, длина которого указана в 2-байтовом заголовке. С этого момента мы будем называть это тело сообщением.
2 Как это выглядит
Похоже на массив байтов. Сообщение начинается после 2-байтового TCP-заголовка, упомянутого выше.
С этого момента мы ожидаем такую структуру данных:
1. Заголовок фиксированной длины разделен на несколько полей, и это необязательно. В документации это должно быть указано, если таковая существует.
2. Растровое изображение 16 байт, в общем. Этот битовый массив представляет собой массив из 8, 16 или 32 байтов, который необходимо преобразовать в его двоичную форму. У нас получается двоичный массив типа 01101010010001 ... Позже я расскажу, как его читать.
3. Последовательность полей, обычно называемых «элементами данных», пронумерованных от 2 до 128, которые, как следует из названия, несут данные сообщения.
Вот и все, так выглядит сообщение в его наиболее распространенной форме, и оно заканчивается после длины, указанной в заголовке TCP.
3 Как вы читаете сообщения ISO8583 из сети
1. Вы читаете заголовок TCP, 2 байта. Это говорит вам, сколько байтов нужно прочитать в сообщении, например, 552 байта.
2. Прочтите 552 байта данных, проанализируйте сообщение.
3. Повторяйте шаги 1-2 до бесконечности;
4 Как вы анализируете сообщения ISO8583
В приведенном выше примере речь идет о 552 байтах. Вы начинаете разбирать эту информацию.
1. Заголовок - это необязательная и фиксированная длина. Если он существует, вам нужно прочитать в него фиксированное количество байтов, например 10 байтов. Обычно этого не существует.
2. Тип сообщения. Фиксированная длина, 4 байта, в большинстве случаев. Прочтите это.
3. Растровое изображение. В большинстве случаев это фиксированная длина 16 байт. Прочтите это, получите двоичное значение. Интерпретируйте это в соответствии с параграфом ниже. Это скажет нам прочитать поля 2, 3, 4, 7, 8, 11, 12, 18, ....
4. Прочтите поля сообщения, указанные в битовой карте, как в примере выше.
Вот и получаются данные в полях.
5 Чтение растрового изображения сообщения
Допустим, у вас есть этот массив растровых изображений, который вы получаете путем преобразования прочитанных байтов растрового изображения в его двоичное представление: 011110010100010001110001111 ...
Проще говоря, вы читаете это так:
Позиция 1, значение равно нулю, означает, что в позиции 1 не будет поля;
Позиция 2, значение равно единице, означает, что на позиции 2 будет поле; Мы должны прочитать Поле 2
Позиция 3, значение равно единице, означает, что на позиции 3 будет поле; Мы должны прочитать Поле 3
Позиция 4, значение равно единице, означает, что в позиции 4 будет поле; Мы должны прочитать Поле 4
Позиция 5, значение равно нулю, означает, что в позиции 5 поля не будет;
Позиция 6, значение равно нулю, означает, что в позиции 6 поля не будет;
Позиция 7, значение равно единице, означает, что на позиции 7 будет поле; Мы должны прочитать Поле 7
И так до 128.
6. Чтение полей ISO8583
Читая растровое изображение выше, мы знаем, какие поля читать, а какие нет.
Прочтите поле 2. Из спецификации мы знаем, как это выглядит. Обычно это LLVAR. Это означает длину 2 байта [LL], а затем значение [VAR], так что это похоже на 161234567890123456. Мы читаем это как длину 16, за которым следует значение: 1234567890123456. Готово, дальше.
Прочтите файл 3. Мы знаем из документа спецификации, как это выглядит. Обычно это фиксированный номер 6. Это означает фиксированный размер 6 байтов. Следующий
Прочтите поле 4. Из спецификации мы знаем, как это выглядит. Обычно это фиксированный 12. Это означает фиксированный размер 12 байт. Следующий
Прочтите поле 7. Видите, мы пропустили 5 и 6, потому что битовая карта сказала, что их нет. Мы знаем из спецификации, как это выглядит. Обычно это фиксированный номер 7. Это означает фиксированный размер 7 байтов. Следующий
И так мы идем до 128 файла.
7 Считывание данных в полях
Для каждого из 128 полей существует несколько довольно стандартных форматов, и обычно в документе спецификации рассказывается, как их интерпретировать.
Обычно это одно из следующих:
1. Фиксированная длина: они определяют тип и длину символов:
a Буквенные символы, от A до Z и от a до z
n Цифровые цифры от 0 до 9
p Pad символ, пробел
s Специальные символы, т. е. другие печатаемые
Буквенные и цифровые символы
как буквенные и специальные символы
ns Числовые и специальные символы
anp Буквенные, цифровые символы и символы клавиатуры
ans Алфавитные, цифровые и специальные символы
7 (7 - примерное число, также может быть 55) Длина поля
2. Длина Defined-Variable, у них 2-5 (обычно) байтов длины, за которыми следует значение
LL Длина следующего элемента переменных данных, от 01 до 99
LLL Длина следующего элемента переменных данных, от 001 до 999
LLLLL Длина следующего элемента переменных данных, от 00001 до 99999
LLLLLL Длина следующего элемента переменных данных, от 000001 до 999999
3. Некоторые другие варианты специальных полей, проприетарных или настраиваемых согласно спецификации, например Track2 Data или EMV.
Это все, если у вас есть вопросы, напишите их ниже, и мы обновим статью.