2017-02-09 3 views
0

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

Пример (фиктивная Великобритания банка, код банка 12-34-56, номер счета 98765432):

  • IBAN:

    GB82 WEST 1234 5698 7654 32 
    
  • Перестановка:

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

    3214282912345698765432161182 
    
  • Compute остаток:

    3214282912345698765432161182 mod 97 = 1 
    

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

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

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

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

+1

Да. Мне нужен модуль для контрольной суммы/проверки. – default

ответ

0

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

"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-е целое число в базе-36:

"W".to_i(36) 
=> 32 

И так далее.

Смежные вопросы