CONVERSION RIB IBAN

vos questions et suggestions sur ce forum, et son fonctionnement
Répondre
ctalhouet
Messages : 42
Enregistré le : mar. 05 juin 2007, 12:48:27

CONVERSION RIB IBAN

Message par ctalhouet »

Bonjour
Recherche PGM RPV ( 2 3 4 free) pour convertir des rib en IBAN ( quelques milliers)

C TALHOUET

cimmelé
Messages : 34
Enregistré le : mer. 28 mars 2007, 21:57:59
Localisation : Rennes(35)
Contact :

Conversion RIB IBAN

Message par cimmelé »

*========================================================================.
* getIBAN Transforme RIB en structure IBAN *
*========================================================================'
H Nomain indent( '| ' )

*------------------------------------------------------------------------*
* Déclaration des fichiers *
*------------------------------------------------------------------------*

/COPY QPROLESRC,getIBAN


* ********************************************************************** *
* getIBAN
*
* On reçoit en paramètres :
* pPays = 'FR'
* pBBAN
* - Code Banque 5c
* - Code Guicher 5c
* - Compte 11c
* - Clé 2c
*
* On retourne la structure IBAN FR.........................
* ********************************************************************** *
PgetIBAN b Export

* ---------------------------------------------------------------------- *
* Déclaration de l'interface *
* ---------------------------------------------------------------------- *
DgetIBAN pi 34a
D pPAYS 2a
D pBBAN 30a
*----
* Variables et constantes *
*----
*
DàTbNum S 1A DIM(10)
DàTbLettre S 1A DIM(26)
*
DàCstNum S 10A INZ('0123456789')
DàCstLettre S 26A INZ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
*
DàCstMaj S 26A INZ('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
DàCstMin S 26A INZ('abcdefghijklmnopqrstuvwxyz')
*
D àDsIBAN DS
D àPays 2A
D àCle 2A
D àBBAN 30A
*
D àI S 2S 0
D àJ S 2S 0
*
D àTmpIBAN S 36A
D àTmpCle S 2A
*
D àInt9 S 9S 0
D àStr9 S 9A
D àTmpMod S 5S 0

C MOVEA àCstLettre àTbLettre
C MOVEA àCstNum àTbNum
/free
// ------------------------------------------------------------------------*
// Début du traitement *
// ------------------------------------------------------------------------*

àDsIBAN = pPAYS + '00' + pBBAN;
àTmpIBAN = àBBAN + àPays + àCle;

EXSR TrtCalcul;

if àTmpCle = '';
return *blank;
else;
àCle = àTmpCle;
return àDsIBAN;
endif;

//------------------------------------------------------------------------*
// Sous routine calcul clé IBAN *
//------------------------------------------------------------------------*
begsr TrtCalcul;

àTmpCle = *blank;

àTmpIBAN = %xlate('-':' ':àTmpIBAN);
àTmpIBAN = %xlate(àCstMin:àCstMaj:àTmpIBAN);
àTmpIBAN = %trim(àTmpIBAN);
àI = 0;
if (%len(%trim(àTmpIBAN)) > 0);
dow (àI < %len(%trim(àTmpIBAN)));
àI = àI + 1;
if (%subst(àTmpIBAN : àI : 1) = ' ');
àTmpIBAN = %subst(àTmpIBAN : 1 : àI - 1) +
%subst(àTmpIBAN : àI + 1);
àI = àI - 1;
endif;
enddo;

// On vérifie si tous les caractères de l'IBAN sont des lettres
// ou des chiffres. Si ce n'est pas le cas, on sort de la fonction.
àTmpIBAN = %trim(àTmpIBAN);
àI = 0;
if (%len(%trim(àTmpIBAN)) > 0);

dow (àI < %len(%trim(àTmpIBAN)));
àI = àI + 1;
if (%lookup(%subst(àTmpIBAN : àI : 1) : àTbNum) <= 0 AND
%lookup(%subst(àTmpIBAN : àI : 1) : àTbLettre) <= 0);
àI = *HIVAL;
else;
àJ = %lookup(%subst(àTmpIBAN : àI : 1) : àTbLettre);
if (àJ > 0);
àJ = àJ + 9;
if (àI > 1);
àTmpIBAN = %subst(àTmpIBAN : 1 : àI - 1) + %char(àJ) +
%subst(àTmpIBAN : àI + 1);
else;
àTmpIBAN = %char(àJ) + %subst(àTmpIBAN : àI + 1);
endif;
endif;
endif;
enddo;
endif;

// On vérifie maintenant qu'il ne reste que des chiffres.
// Si ce n'est pas le cas on quitte la fonction.
àTmpIBAN = %trim(àTmpIBAN);
àI = 0;
if (%len(%trim(àTmpIBAN)) > 0);
dow (àI < %len(%trim(àTmpIBAN)));
àI = àI + 1;
if (%lookup(%subst(àTmpIBAN : àI : 1) : àTbNum) <= 0);
àI = *HIVAL;
leavesr;
endif;
enddo;

àStr9 = '';
dou (%len(%trim(àTmpIBAN)) <= 9);
if (àStr9 <> '');
àTmpIBAN = %replace(%char(àTmpMod) : àTmpIBAN : 1 : %len(àStr9));
endif;
if (%len(%trim(àTmpIBAN)) < 9);
àStr9 = %trim(àTmpIBAN);
else;
àStr9 = %subst(%trim(àTmpIBAN) : 1 : 9);
endif;
àInt9 = %INT(àStr9);
àTmpMod = %rem(àInt9 : 97);
enddo;

àTmpMod = 98 - àTmpMod;
if (àTmpMod <= 9);
àTmpCle = '0' + %CHAR(àTmpMod);
else;
àTmpCle = %CHAR(àTmpMod);
endif;

endif;
endif;
endsr;
/end-free

PgetIBAN e

[/list]

Répondre