2017-02-09 4 views
0

Notez qu'il ne s'agit pas d'utiliser des bibliothèques ou un langage de programmation spécifique. Je veux juste comprendre le concept suivant, de Wikipedia, IBAN Validation de l':Comment convertir un IBAN en nombre entier?

Exemple (banque fictive Royaume-Uni, trier Code 12-34-56, numéro de compte 98765432):

  • IBAN:

    GB82 WEST 1234 5698 7654 32 
    
  • Réorganiser:

    W E S T12345698765432 G B82 
    
  • Convertir en entier:

    3214282912345698765432161182 
    
  • reste Calculer:

    3214282912345698765432161182 mod 97 = 1 
    

L'étape gras me cause des maux de tête. Je suppose que l'IBAN est alphanumérique, c'est-à-dire codé en base 36 (10 chiffres, 26 lettres).

Maintenant, quand je convertis la base-36 en base-10 (c'est ainsi que je comprends cette étape), mon résultat est loin. Ici, par exemple, en Ruby:

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

Maintenant, s'il vous plaît, quelqu'un éclairez-moi, ce qui est vraiment destiné par converti en entier?

+1

Oui. J'ai besoin du modulo pour la somme de contrôle/validation. – default

Répondre

0

Oh! La mise en forme sur Wikipédia m'a donné un indice: Ce n'est pas un, tout, grand nombre, mais chaque personnage doit être converti en soi:

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

Résultat:

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

Note, le W est le 32e nombre entier dans Base-36:

"W".to_i(36) 
=> 32 

Et ainsi de suite.