Validité compte IBAN

vins1892

XLDnaute Nouveau
Bonjour à tous,

je souhaite vérifier la structure de compte IBAN dans notre base de données.

Dans Excel, la fonction MOD ne permet pas d'effectuer des calculs sur des nombres aussi grands (le calcul me ramène #NOMBRE).

Pour contourner cela, je découpe le nombre et ensuite divise par 97:

Exemple de compte à valider: FR76 30004 00892 00010114009 21

Devient 30004 00892 00010114009 21 FR76

F = 15 et R = 27.

Mon nombre est 30004008920001011400921152776

Je prends les 9 ers chiffres 300040089 divisé par 97 = reste 68

Je prends le reste de la division et le colle au 7 chiffres suivants:
680001011 divisé par 97 = reste 68.

Idem pour les 7 suivants:
684009211 divisé par 97 = reste 34

Idem pour les suivants:
3452776 divisé par 97 = reste 61

Et 98 - 61 = 37 alors que les deux derniers chiffres de l'IBAN sont 21

Quelqu'un peut-il m'aider ou à débelopper une fonction qui permet de faire ce contôle? Ou m'expliquer comment faire fonctionner la fonction MODULO 97 sur un grand nombre?
Ou me suis-je peut-être tromper dans les formules ...

Merci pour votre aide.
 

abcd

XLDnaute Barbatruc
Re : Validité compte IBAN

Bonjour,

Je ne m'y connais pas du tout, mais il m'étonnerait quand même qu'on puisse calculer une clef, IBAN ou autre, sur base d'une chaine de caractères contenant la clef cherchée.
C'est le serpent qui se mord la queue.

abcd
 

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

bonjour a tous

voici une macro de controle de l'IBAn


EDIT : Les nuits portent conseils

Le cas de la Banque Postale et ses lettres dans le numéro de compte m'ont un peu obnubilé
Voir plus loin une version qui prend en compte les numéros Français avec ou sans lettre dans le N°
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

Re

Macro de controle du Numéro IBAN pour la
France (27) Format IBAN : FRkk BBBB BGGG GGCC CCCC CCCC CKK
B = code banque, G = code guichet, C = numéro de compte, K = clé
Code:
Function ControleIban(LeNumIban As String) As Boolean
Dim x As String
LeNumIban = Replace(LeNumIban, " ", "")
LeNumIban = Right(LeNumIban, Len(LeNumIban) - 4) & Left(LeNumIban, 4)
For n = 1 To Len(LeNumIban)
x = Mid(LeNumIban, n, 1)
 If Not IsNumeric(x) Then
   LeNumIban = Replace(LeNumIban, x, convIBAN(x))
 End If
Next n
B = CDbl(Left(LeNumIban, 8))
C = CDbl(Mid(LeNumIban, 9, 8))
D = CDbl(Mid(LeNumIban, 17, 8))
E = CDbl(Right(LeNumIban, Len(LeNumIban) - 24))
If Len(LeNumIban) = 30 Then ' cas de La Poste ( 1 lettre dans le Numéro de compte)
  num = (B * 25 + C * 53 + D * 27 + E Mod 97)
Else
 If Len(LeNumIban) = 29 Then 'cas de numero français sans aucune lettre
  num = (B * 51 + C * 15 + D * 90 + E Mod 97)
 End If
End If
  div = Int(num / 97)
If num - div * 97 = 1 Then
  ControleIban = True
Else
  ControleIban = False
End If
End Function

Pour les autres Pays, me consulter eventuellement (avec N° pour controle)
 

Pièces jointes

  • ControleIban.xls
    24 KB · Affichages: 588

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

Re

En reprenant la demande initiale , j'ai repris le problème par l'étude du Modulo 97 pour des grands nombres

Voici le résultat de cette étude
Que ceux qui pourront tester me fasse signe S.V.P
 

Pièces jointes

  • mod97.zip
    10.9 KB · Affichages: 289
  • mod97.zip
    10.9 KB · Affichages: 294
  • mod97.zip
    10.9 KB · Affichages: 308
G

Guest

Guest
Re : Validité compte IBAN

Hello PierreJean,

Super ton boulot,

Je vais tester sur les IBAN de tous mes comptes:

en Suisse,
à Jersey,
à Monaco,
aux îles Caïman,
au Luxembourg,

Et je dois bien en avoir quelques autres ailleurs mais j'ai oublié.

amitié.
 

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

Re

Merci Hasco

Venant de ta part le compliment prend toute sa valeur

Tu n'as pas de compte a Malte (avec 1 ou 2 lettres de preference) ???

Pour ma part je voulais en ouvrir un avec ce que me rapporte mes macros, mais il parait que ce n'est pas suffisant !!
 

vins1892

XLDnaute Nouveau
Re : Validité compte IBAN

Bonjour,

ai testé le modulo 97 sur des comptes aux Pays-Bas et il me rammène #VALEUR.

Comptes testés avec et sans espace, même souci):

NL75INGB0662682300
NL64 INGB 0020 1094 90
NL09 INGB 0678 3233 80
NL72 INGB 0678 3234 10
NL44 INGB 0678 3234 29
NL28 INGB 0663 3212 12
NL96 INGB 0663 3228 98
NL22 INGB 0678 3234 37
NL44 INGB 0658 9087 82
NL81 INGB 0670 7520 10

Je profite de l'occasion pour vous féliciter pour ce super travail.

Vincent.
 

pierrejean

XLDnaute Barbatruc
Re : Validité compte IBAN

Re

Merci beaucoup pour ces elements de test qui me permettent les mises au point Celles-ci sont indispensables pour moi qui n'ait pas la tête suffisament bien faite pour imaginer tous les cas de figure

Pour les accros du Vba :
Le problème etait dans la boucle consistant a remplacer les lettres par leur conversion
On remplace une lettre par un nombre a 2 chiffres
Par consequent a chaque remplacement la longueur du numero s'accroit d'une unité
la solution adoptée est le remplacement de la boucle for Next par une boucle While Wend

Pour autant S.V.P testez et retestez encore et Merci d'avance pour les retours
 

Pièces jointes

  • mod97.zip
    11.4 KB · Affichages: 306
  • mod97.zip
    11.4 KB · Affichages: 299
  • mod97.zip
    11.4 KB · Affichages: 305
Dernière édition:

Statistiques des forums

Discussions
312 231
Messages
2 086 457
Membres
103 219
dernier inscrit
Akyrah