Re: Modulo Iban + limites Windev

Posté par drcharly93 le 20/4/2010 23:03:46
Bonjour, je vois que Keith2001 n'a pas l'intention de partager alors très rapidement un premier jet :
PROCEDURE Controle( LOCAL pIban est une chaîne )
Ind est un entier
pIban = Majuscule( pIban )
pIban = Remplace(pIban, "-","")
pIban = Remplace(pIban, " ", "" )
mPays est une chaine =pIban[[ A 2 ]]
mPaysest une chaine = pIban[[ A 2 ]]
mCle est une chaine = pIban[[ 3 A 4 ]]
mBban est une chaine = pIban[[ 5 A 34 ]]

mIbanWork est une chaine = SansEspace(mBban) + mPays + "00" 
//On remplace les lettres par 2 chiffres selon la table de conversion de l'IBAN
POUR Ind = 1 A 26
	mIbanWork = Remplace(mIbanWork,Caract(64+Ind),Ind+9)
FIN
//on boucle tant que le nombre de chiffres de l'iban est strictement superieur a la données de calcul
sBuff est une chaîne = SansEspace(:m_IbanWork)
varCalc est une chaîne
tailleVarCalc est un entier = 13
varClac2 est une chaîne fixe de 13
TANTQUE Taille( sBuff ) > tailleVarCalc
	//On récupère la portion de chiffre maximum
	varCalc = Gauche(sBuff,tailleVarCalc)
	//On supprime la portion récupéré de la zone de travail
	sBuff = sBuff[[ Taille(varCalc)+1 A ]]
	//On calcul le modulo 97 d'une portion de l'IBAN
	varClac2 =(PartieEntière(Val(varCalc)/97))
	varCalc = Val(varCalc) - (Val(varClac2) *97)
	//On ajoute ce modulo 97 devant la donnée restant à traiter( qu'il y ait 1 ou 2 chiffre(s) est égal
	sBuff = varCalc + sBuff
FIN

//On récupère la valeur restante en numérique
varCalc = Val(sBuff)
//On calcul le modulo 97 et on soustrait le reste de 98
varClac2 = PartieEntière(Val(varCalc)/97)
varCalc = 98 - (Val(varCalc) - (Val(varClac2) * 97))

//Recadrage sur 2 chiffre toujours significatifs
cleCalc est une chaîne fixe sur 2
cleCalc = Droite(varCalc,2)
cleCalc = Remplace(cleCalc," ","0")

RENVOYER cleCalc


Ce code peut être optimisé avec des modulos
La procédure renvoi la valeur de la clé que son les deux caractères qui suivent le code pays
Si la clé est incoonu vous pouvez la remplacer par 00 elle vous sera retournée par la fonction

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=17&topic_id=6372&post_id=25193