PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → contrôle validité numéro IBAN
contrôle validité numéro IBAN
Débuté par michel, 15 juin 2014 10:39 - 14 réponses
Posté le 15 juin 2014 - 10:39
Bonjour,

Pc Soft avait donné "à l'époque" une fonction permettant de contrôler la validité d'un RIB.
Existe t-il l'équivalent pour l'IBAN ?
J'ai bien vu que dans la LST 94 il y a un exemple "WD SEPA" qui propose une procédure pour transformer un RIB en IBAN, mais je n'ai rien trouvé sur le contrôle dans la saisie d'un nouvel IBAN.

Merci d'avance pour votre aide
Michel
Posté le 16 juin 2014 - 08:44
Bonjour,

Pc Soft avait donné "à l'époque" une fonction permettant de contrôler la
validité d'un RIB.
Existe t-il l'équivalent pour l'IBAN ?
J'ai bien vu que dans la LST 94 il y a un exemple "WD SEPA" qui propose une
procédure pour transformer un RIB en IBAN, mais je n'ai rien trouvé sur le
contrôle dans la saisie d'un nouvel IBAN.

Merci d'avance pour votre aide
Michel


Bonjour,

http://fr.wikipedia.org/wiki/ISO_13616

En surfant je suis tombé là-dessus. Je n'ai pas encore eu besoin de
l'utiliser mais il semble y avoir tout ce qu'il faut.

Cordialement,

--
Pierre
Posté le 16 juin 2014 - 09:06
Bonjour,

Dans la LST95, il y a un exemple de contrôle sur l'IBAN (Q&R LST95)

Bien à vous
Membre enregistré
13 messages
Posté le 16 juin 2014 - 09:25
Procedure VérifieIBAN(LOCAL sNuméroIBAN est une chaîne)

// 1. Formate la chaîne pour supprimer les caractères invalides
sNuméroIBAN = ChaîneFormate(sNuméroIBAN, ccMajuscule+ccSansAccent+ccSansEspace+ccSansPonctuationNiEspace)

// 2. Pré-requis : la chaine doit comporter au moins 14 caractères, 34 caractères au plus
SI Taille(sNuméroIBAN) < 14 _OU_ Taille(sNuméroIBAN) > 34 ALORS RENVOYER Faux

// 3. Les 4 premiers caractères doivent être déplacés à droite de la chaîne
sNuméroIBAN = sNuméroIBAN[[5 A]] + sNuméroIBAN[[A 4]]

// 4. Chaque lettre doit être remplacée par son rang dans l'alphabet, incrémenté de 9 (ex : "A" => rang 1 dans l'alphabet + 9 => 10)
POUR nCodeASCII = Asc("A") _A_ Asc("Z")
sNuméroIBAN = Remplace(sNuméroIBAN, Caract(nCodeASCII), nCodeASCII-Asc("A")+10)
FIN

// 5. Le résultat du modulo 97 sur le nombre obtenu doit être 1
RENVOYER (Modulo(Val(sNuméroIBAN), 97) = 1)
Posté le 16 juin 2014 - 12:03
michel a formulé la demande :
Bonjour,

Pc Soft avait donné "à l'époque" une fonction permettant de contrôler la
validité d'un RIB.
Existe t-il l'équivalent pour l'IBAN ?
J'ai bien vu que dans la LST 94 il y a un exemple "WD SEPA" qui propose une
procédure pour transformer un RIB en IBAN, mais je n'ai rien trouvé sur le
contrôle dans la saisie d'un nouvel IBAN.

Merci d'avance pour votre aide
Michel


seul les organismes bancaires ou autorisés peuvent convertir
intégralement un RIB en IBAN + BIC, d'après c'est que j'ai pu trouver
comme infos, à moins que le SWIFT (Society for Worldwide Interbank
Financial Telecommunication) vous permette de la faire mais AMHA cela
ne sera pas gratuit

la seule chose que vous pouvez faire c'est de calculer le code de
contrôle se trouvant juste après le code pays le reste de l'IBAN étant
composé du RIB, néanmoins il existe des liste de BIC (ou SWIFT) sur
internet (http://www.theswiftcodes.com/france/)

vous avez ici (http://migrationsepa.bnpparibas.fr/webapp/calculette.do)
un convertisseur

--
Cordialement JeAn-PhI
Posté le 16 juin 2014 - 17:10
Bonjour et merci à tous pour vos réponses !!! (un petit + pour Aline qui m'a permis de récupérer rapidement le code :merci:
)

Je n'avais pas vu que ce sujet était traité dans les Q&R de la LST95. Ce qui est dommage, c'est que même en faisant des recherches sur "IBAN" dans l'éditeur windev, on ne tombe pas sur ces infos...

Encore merci pour m'avoir permis d'avancer !!!

Bonne fin de journée et bons dev !
Michel
Posté le 16 juin 2014 - 23:42
Bonjour Michel

Site de pcsoft, Menu support technique choix ressources pratiques:
rechercher IBAN

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

NOUVEAU: WXShowroom.com est disponible : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 6/16/2014 9:10 AM, Michel wrote:
Bonjour et merci à tous pour vos réponses !!! (un petit + pour Aline qui
m'a permis de récupérer rapidement le code :merci:
)

Je n'avais pas vu que ce sujet était traité dans les Q&R de la LST95. Ce
qui est dommage, c'est que même en faisant des recherches sur "IBAN"
dans l'éditeur windev, on ne tombe pas sur ces infos...

Encore merci pour m'avoir permis d'avancer !!!

Bonne fin de journée et bons dev !
Michel
Posté le 17 juin 2014 - 09:32
Bonjour Fabrice,

Effectivement, je n'avais pas cherché de ce coté. Bon à savoir.
Merci pour ce petit rappel !!!

Bonne journée
Michel
Posté le 28 juin 2022 - 16:48
Très bon algorithme mais qui ne marche pas toujours (:
exemple : RIB FR881744800001POMSRGJMDZJ04

Xavier
Membre enregistré
1 939 messages
Popularité : +53 (65 votes)
Posté le 28 juin 2022 - 18:59
Bonjour,

Il me semble qu'il y a un champ métier IBAN en WD27.

--
Bon dev,
Jean-Pierre
Membre enregistré
8 messages
Posté le 07 juin 2023 - 16:25
Même problème que Xavier avec un autre numéro qui est bien considéré comme valide sur des sites permettant de le vérifier.
Est ce que quelqu'un serait tombé sur un code qui fonctionnerais ?

Pas vu de champ métier en WD27 pour l'IBAN

Par contre, il y a une fonction IBANValide() ... mais que à partir de la version 28 (forcement on est en 27)
https://doc.pcsoft.fr/?1410089019
Membre enregistré
2 572 messages
Popularité : +222 (260 votes)
Posté le 07 juin 2023 - 16:36
Bonjour,

Tout est expliqué ici: https://fr.wikipedia.org/wiki/International_Bank_Account_Number…

--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
8 messages
Posté le 08 juin 2023 - 09:06
Bonjour,
Merci pour le lien, c'est bien cette méthode qui est utilisée et donc je suis aussi tombé dessus hier, il faut découper le calcul du modulo

En effet, la conversion de l'IBAN en chiffre dépasse la capacité de stockage des variables

j'ai repris le code en ajoutant des traces et l'IBAN cité plus haut FR881744800001POMSRGJMDZJ04

Voici ce que l'on obtient
Procedure VérifieIBAN(LOCAL sNuméroIBAN est une chaîne)

// 1. Formate la chaîne pour supprimer les caractères invalides
sNuméroIBAN = ChaîneFormate(sNuméroIBAN, ccMajuscule+ccSansAccent+ccSansEspace+ccSansPonctuationNiEspace)
Trace("IBAN source = "+sNuméroIBAN)

// 2. Pré-requis : la chaine doit comporter au moins 14 caractères, 34 caractères au plus
SI Taille(sNuméroIBAN) < 14 _OU_ Taille(sNuméroIBAN) > 34 ALORS RENVOYER Faux

// 3. Les 4 premiers caractères doivent être déplacés à droite de la chaîne
sNuméroIBAN = sNuméroIBAN[[5 À]] + sNuméroIBAN[[À 4]]
Trace("IBAN avec déplacement caract ="+sNuméroIBAN)

// 4. Chaque lettre doit être remplacée par son rang dans l'alphabet, incrémenté de 9 (ex : "A" => rang 1 dans l'alphabet + 9 => 10)
POUR nCodeASCII = Asc("A") _À_ Asc("Z")
sNuméroIBAN = Remplace(sNuméroIBAN, Caract(nCodeASCII), nCodeASCII-Asc("A")+10)
FIN
Trace("IBAN après conversion lettre = "+ sNuméroIBAN)
Trace("VAL de l'IBAN = "+Val(sNuméroIBAN))

nNItemp est un entier sur 8 octets = sNuméroIBAN
Trace("entier sur 8 = "+nNItemp)

moNItemp est un monétaire = sNuméroIBAN
Trace("monétaire = "+moNItemp)

nItemp est un numérique(*) = sNuméroIBAN
Trace("numérique = "+nItemp)

rItemp est un réel = sNuméroIBAN
Trace("réel = "+rItemp)

soit test = ChaîneVersNumérique(sNuméroIBAN) // Mais retourne un Réel ou entier
Trace("dec auto = "+test)

// 5. Le résultat du modulo 97 sur le nombre obtenu doit être 1
RENVOYER (Modulo(Val(sNuméroIBAN), 97) = 1)


Et voici les traces


Membre enregistré
8 messages
Posté le 08 juin 2023 - 10:08
Si ca peut aider quelqu'un donc
Procedure VérifieIBAN1(LOCAL sNuméroIBAN est une chaîne)

// 1. Formate la chaîne pour supprimer les caractères invalides
sNuméroIBAN = ChaîneFormate(sNuméroIBAN, ccMajuscule+ccSansAccent+ccSansEspace+ccSansPonctuationNiEspace)
Trace("IBAN source = "+sNuméroIBAN)

// 2. Pré-requis : la chaine doit comporter au moins 14 caractères, 34 caractères au plus
SI Taille(sNuméroIBAN) < 14 _OU_ Taille(sNuméroIBAN) > 34 ALORS RENVOYER Faux

// 3. Les 4 premiers caractères doivent être déplacés à droite de la chaîne
sNuméroIBAN = sNuméroIBAN[[5 À]] + sNuméroIBAN[[À 4]]
Trace("IBAN avec déplacement caract = "+sNuméroIBAN)

// 4. Chaque lettre doit être remplacée par son rang dans l'alphabet, incrémenté de 9 (ex : "A" => rang 1 dans l'alphabet + 9 => 10)
POUR nCodeASCII = Asc("A") _À_ Asc("Z")
sNuméroIBAN = Remplace(sNuméroIBAN, Caract(nCodeASCII), nCodeASCII-Asc("A")+10)
FIN

//https://fr.wikipedia.org/wiki/International_Bank_Account_Number#Algorithme_de_v%C3%A9rification_de_l'IBAN
// calcul de modulo par étapes
sDécoupe est une chaîne
sModulo est une chaîne

Trace("IBAN en chiffre : "+sNuméroIBAN)
sDécoupe = Gauche(sNuméroIBAN,10)
Trace("Découpe : "+sDécoupe)
sNuméroIBAN = Milieu(sNuméroIBAN,11)
Trace("Reste : "+sNuméroIBAN)
TANTQUE (sNuméroIBAN <> "")
sModulo = Modulo (Val(sDécoupe), 97)
Trace("Modulo : "+sModulo)
sDécoupe = sModulo + Gauche(sNuméroIBAN,8)
Trace("Découpe : "+sDécoupe)
sNuméroIBAN = Milieu(sNuméroIBAN,9)
Trace("Reste : "+sNuméroIBAN)
FIN
Trace("Découpe : "+sDécoupe)

sModulo = Modulo (Val(sDécoupe), 97)
Trace("Modulo : " +sModulo)

RENVOYER (sModulo = "1")
Message modifié, 08 juin 2023 - 10:20
Posté le 14 juin 2023 - 13:34
Bonjour,
Il existe la fonction IBANValide() qui permet la validité d'un IBAN.
NN12