Как преобразовать IBAN в целое число?

Обратите внимание, речь не идет об использовании библиотек или какого-либо конкретного языка программирования. Я просто хочу понять следующую концепцию из Википедии, Проверка IBAN :

Пример (фиктивный банк Соединенного Королевства, код сортировки 12-34-56, номер счета 98765432):

  • IBAN:

       GB82 WEST 1234 5698 7654 32  
    
  • Переставить:

       W E S T12345698765432 G B82  
    
  • Преобразовать в целое число:

      3214282912345698765432161182  
    
  • Вычислить остаток:

      3214282912345698765432161182  mod 97 = 1
    

Смелый шаг вызывает у меня головную боль. Я предполагаю, что IBAN является буквенно-цифровым, т. Е. Кодированным Base-36 (10 цифр, 26 букв).

Теперь, когда я конвертирую base-36 в base-10 (именно так я понимаю этот шаг), мой результат далек. Вот, например, в Руби:

 $ irb
irb(main):001:0> "WEST12345698765432GB82".to_i(36)
=> 15597194993925618867946544653683410

Теперь, пожалуйста, кто-нибудь, просветите меня, что на самом деле означает преобразовать в целое число?


person Afr    schedule 09.02.2017    source источник
comment
Да. Мне нужен модуль для контрольной суммы/проверки.   -  person Afr    schedule 09.02.2017


Ответы (1)


Ой! Форматирование в Википедии дало мне подсказку: это не одно целое большое число, но каждый символ должен быть преобразован отдельно:

"WEST12345698765432GB82".split("").each do |c| 
  print c.to_i(36)
end

Результат:

3214282912345698765432161182
=> ["W", "E", "S", "T", "1", "2", "3", "4", "5", "6", "9", "8", "7", "6", "5", "4", "3", "2", "G", "B", "8", "2"]

Обратите внимание, что W — это 32-е целое число в Base-36:

"W".to_i(36)
=> 32

И так далее.

person Afr    schedule 09.02.2017