Diebold:
Проблема заключается в том, что если карта с разными ПАНами на чипе и полосе, PinBlock вообще не генерируется и отправляется 1111222233334444
Если ПАНы одинаковые, то все генерируется нормально.
На банкомате NCR эту проблему решили с помощью стейта 'k - Smart FIT Check State'
Прочитав и перечитав все стейты, которые есть для диболда, ничего похожего не нашел.
Кто-нибудь уже сталкивался или есть какие то мысли?
Добавлено спустя 23 часа 40 минут 5 секунд:
Возможно дело в стейте Card Reader State (CR b)
Не очень понятно какие conditions ставить. Чтобы работало для безчиповой карты нужно ставить Read Conditions (composite) : 002State Number Valid state numbers
State Type CR b
Unit Number 001
Operation 001 - 007, 009 - 015
Screen Number Valid screen numbers
Consumer Response Time 000 - 255, 900 - 931, 999
Good Operation Next State Valid state numbers
Consumer Fault Next State Valid state numbers
Hardware Fault Next State Valid state numbers
Network Fault Next State Valid state numbers
Read Conditions (composite) 000 - 017
Read Condition A 000 - 015
Read Condition B 000 - 015
Read Condition C 000 - 015
Read Condition D 000 - 015
Pre-head 000 - 002
И все из-за этогоDescription: If the Operation entry contains 001 (read the card), the Read Conditions (composite) entry tells the terminal which card tracks it must read
correctly. The terminal must satisfy the Read Conditions before going to the Good Operation Next State. The valid values are as follows:
000 - None
001 - 3 only
002 - 2 only
003 - 2 and 3
004 - 1 only
005 - 1 and 3
006 - 1 and 2
007 - 1 and 2 and 3
008 - Chip connect only
009 - Chip connect and 3
010 - Chip connect and 2
011 - Chip connect and 2 and 3
012 - Chip connect and 1
013 - Chip connect and 1 and 3
014 - Chip connect and 1 and 2
015 - Chip connect and 1 and 2 and 3
Тогда получается, что эти же значения нужно оставлять и для чиповой:NOTE
The following four entries are required to be present in the state data only for operations 001, 013, and 014 with a smart card reader, or when the
optional Pre-head entry is included in the state data. If the terminal cannot read smart cards, the Read Conditions (composite) entry must be used
to define read conditions, and the Read Condition A, B, C, and D entries, if present, must contain the value 000.
If one of these entries is present, all four must be present.
If any of the Read Condition A, B, C, and D entries contain a non-zero value, the corresponding read condition overrides whatever conditions are
specified in the Read Conditions (composite) entry.
И тогда если идет чиповая карта и на чипе ПАН отличается от ПАНа на полосе, банкомат не понимает как шифровать PinBlockRead Conditions (composite) 002
Read Condition A 000
Read Condition B 000
Read Condition C 000
Read Condition D 000
Если брать во внимание только чиповые карты и делать
то все равно PinBlock не генерируетсяRead Conditions (composite) 000
Read Condition A 010
Read Condition B 010
Read Condition C 010
Read Condition D 010
Но есть ощущения, что дело именно в этом, потому что на NCR'е предусмотрен стейт smart fit check, а diebold такой стейт не предусмотрел. Видимо потому что банкомат должен сам с этим справляться.