Le téléchargement des pièces jointes est limité aux membres Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description
Cette fonction permet à partir d'un Code Pays et d'un numéro de compte de renvoyer la Clé IBAN.
On envoie "FR" et un N° de Compte "132061100000000562...." complet donc pour les comptes français avec la Clé RIB incluse et cela renvoie le Code Pays passé en entrée suivi de la Clé de Contrôle (Exemple : FR76).
Cette fonction a été écrite en s'appuyant sur des Contributions AtoutFox, sur des réponses que j'ai eues dans le news "microsoft.public.fr.fox" et je remercie ceux qui y ont participés.
*-------------------------------------------------------------------------------------------------------------------------* FUNCTION CleIban
PARAMETER CodPay, NCpt *********************************************************************** * La fonction doit recevoir Code Pays en alpha (2 Car.) en parametres * La fonction doit recevoir le numéro de compte complet en parametres * * L'IBAN est renvoyé par la fonction en AlphaNumérique ("XX99") * Code Pays + Cle IBAN calculée * * Pour les N° comptes alpha les lettres sont remplacées par des chiffres * selon la convention ci_dessous * * A=10 B=11 C=12 ... * *********************************************************************** PRIVATE MonIbanComplet, MonIbanTravail, BtI, BtRest PRIVATE ValRetour
m.ValRetour=""
* Verification des Paramettres
IFLEN(ALLTRIM(UPPER(m.CodPay))) # 2 THEN RETURN m.ValRetour ENDIF IFEMPTY(ALLTRIM(m.NCpt)) ORLEN(ALLTRIM(m.NCpt))>30 THEN RETURN m.ValRetour ENDIF
* Transformation des Lettres par leurs valeurs dans le N° de Compte
le 22/04/2009, eric leissler a écrit : simple, clair et net Bravo Jean Marc ! je te donne 20/20 ( si tant est que je sois capable de donner quoi que ce soit. Amitiés Eric
le 29/04/2009, Gregory Adam a écrit : Salut Jean-Marc,
Quelques observations
(1) Tu n’aimes pas les boucles (2) ? CleIban('MK', '250120000058984') retourne ‘MK7’ au lieu de ‘MK07’ (3) Selon http://en.wikipedia.org/wiki/International_Bank_Account_Number , la clef ne peut être 98 (eg FR98) et doit être FR01 a. Convert the string to an integer (i.e. ignore leading zeroes) and mod-97 the entire number minus 1, then add 1. b. J’ai fait le calcul et essaye avec FR98 et FR01 (http://www.tbg5-finance.org/?ibancheck.shtml) i. Il n’accepte pas les FR01 (ou BE01). Donc le wiki doit avoir une erreur ii. J’ai modifie ma contrib – et ajoute AL (4) Le format des IBAN se trouve aussi ici > http://www.swift.com/57387/bic_downloads_documents/pdfs/IBAN_Registry.pdf a. ( page principale http://www.swift.com/solutions/messaging/information_products/directory_products/iban_format_registry/index.page?lang=en ) i. Ou http://www.swift.com/solutions/messaging/information_products/directory_products/iban_format_registry/index.page?lang=fr
Je viens de corriger le cas du "MK07" à la place du "MK7".
Les boucles, je n'ai rien contre mais dans ce cas là, je trouve le code moins lisible, je l'ai fait en boucle et je l'ai remis en commentaire.
Par contre, je n'ai pas d'exemple pour essayer le "FR01" ou le "FR98" ou alors je n'ai pas compris ce que tu voulais dire.
A+
TESTUD Jean-Marc (www.testud.fr)
le 30/04/2009, Gregory Adam a écrit : J'explique (1) La boucle btRest = '' For i = 1 to len(m.MonIbanTravail) step 10 BtRest = ltrim(str(int(mod(val(BtRest + substr(MonIbanTravail, m.i, 10)), 97)))) endfor
(2) Supposons (exemple) que NCpt = 00000097 Cela veut dire que le mod(nCpt, 97) sera 0 Maintenant compare ces deux facons de calculer
n = '00000097'
&& wiki && Convert the string to an integer (i.e. ignore leading zeroes) and mod-97 the entire number minus 1, then add 1. x = mod(int(val(n)) -1, 97) + 1 ?x && 97 ?'Clef wiki', padl(98 - x, 2, '0') && 01
Mes tests prouvent que la facon du wiki est mauvaise
le 11/05/2009, Jean-Marc TESTUD a écrit : Voici, grace à la participation éclairée de Grégory, la version definitive ... j'espère
TESTUD Jean-Marc (www.testud.fr)
le 11/09/2009, Jean à Grenoble a écrit : et pour faire un peu plus 'moderne' (cela doit dater de ... FPD2.0 !) : sur l'avant dernière ligne : RIGHT("00"+ALLTRIM(STR(m.ValRetour)),2) peut s'écrire
J'adore ton commentaire sur la vétusté du code proposé, je ne te savais pas si en pointe au niveau des nouvelles technologies et c’est vrai que de mon coté je suis monté dans le dernier wagon du train du progrès que de justesse.
Toutefois pour amener plus de précisions, quand tu parles de FPD2.0, je suppose qu'il s'agit en réalité de FPW2.0.
Jean-Marc
le 11/09/2009, Francis Faure a écrit : :-) à y être :
PADL(m.ValRetour, 2, "0")
est il plus "moderne" ?
Cordialement
le 11/09/2009, Jean-Marc TESTUD a écrit : Le maitre a parlé, c'est beau ... et efficace en plus.
simple, clair et net
Bravo Jean Marc !
je te donne 20/20 ( si tant est que je sois capable de donner quoi que ce soit.
Amitiés
Eric