BluePink BluePink
XHost
Servere virtuale de la 20 eur / luna. Servere dedicate de la 100 eur / luna - servicii de administrare si monitorizare incluse. Colocare servere si echipamente de la 75 eur / luna. Pentru detalii accesati site-ul BluePink.

|RO| |XX| |yyyy| |ZZZZZZZZZZZZZZZZ|
|__| |__| |____| |________________|
    :     :          :                                 :
    :     :          :                                 :
    :     :          :                                 --> 16 caractere care identifica in mod unic unitatea
    :     :          :                                       teritoriala a institutiei si contul clientului
    :     :          :                                       deschis la respectiva unitate teritoriala
    :     :          :                                       (alfanumerice, majuscule)
    :     :          :
: : --> 4 caractere de identificare a institutiei (alfabetice,
    :     :           majuscule), reprezentand primele patru caractere ale codului
    :     :           BIC al institutiei
    :     :
: --> 2 caractere de verificare (numerice, de la 0 la 9)
    :
    --> codul de tara (2 caractere alfabetice, majuscule) - pentru Romania este RO.

Algoritmul de validare al unui cod IBAN

Pas preliminar: In cazul in care codul IBAN este prezentat pe suport hartie, se converteste formatul acestuia la formatul electronic prin stergerea spatiilor de separare.
EXEMPLU: un cod IBAN de tipul RO49 AAAA 1B31 0075 9384 0000 devine RO49AAAA1B31007593840000.

Pasul 1: Se muta primele patru caractere (simbolizând codul de tara si caracterele de verificare) la dreapta codului IBAN.
EXEMPLU: RO49AAAA1B31007593840000 devine AAAA1B31007593840000RO49.

Pasul 2: Se face conversia literelor in numere, conform tabelei urmatoare :



A = 10 G = 16 M = 22 S = 28 Y = 34

B = 11 H = 17 N = 23 T = 29 Z = 35

C = 12 I = 18 O = 24 U = 30

D = 13 J = 19 P = 25 V = 31  

E = 14 K = 20 Q = 26 W = 32  

F = 15 L = 21 R = 27 X = 33  


EXEMPLU: AAAA1B31007593840000RO49 devine 1010101011131007593840000272449

Pasul 3: Se aplica algoritmul MOD 97-10 (conform ISO 7064). Pentru ca cele 2 caractere de verificare sa fie corecte (codul IBAN sa fie corect), restul impartirii numarului astfel obtinut la 97 trebuie sa fie 1.
EXEMPLU: Restul impartirii lui 1010101011131007593840000272449 la 97 este 1.

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int lungime(char *iban)
{
       int i;
       for(i=0;iban[i]!=NULL;i++);
       return i;
}
void adaug(char el,int poz,char *iban)
{
        int i;
        int n=lungime(iban);
        for(i=n;i>poz;i--)
               iban[i]=iban[i-1];
        iban[i]=el;
        iban[n+1]=NULL;
}
void sterge(int poz,char *iban)
{
       int i;
       for(i=poz;iban[i+1]!=NULL;i++)
              iban[i]=iban[i+1];
       iban[i]=NULL;
}
void spatii(char *iban)
{
       int i;
       for(i=0;iban[i]!=NULL;i++)
       if(iban[i]=='  ')
       {
              sterge(i,iban);
       }
}
void inlocuire(char *iban)
{
       int numar;
       int i;
       int n=lungime(iban);
       for(i=0;iban[i]!=NULL;i++)
       {
              if(iban[i]>='A' && iban[i]<='Z')
              {
                     numar=(iban[i]-'A')+10;
                     sterge(i,iban);
                     adaug(numar%10+'0',i,iban);
                     adaug(numar/10+'0',i,iban);
                     n++;
                     iban[n]=NULL;
              }
       }
}
int este_iban(char *iban)
{
       int i;
       for(i=0;i<2;i++)
              if(iban[i]<'A' || iban[i]>'Z')
                     return 0;
       while(i<4)
       {
              if(iban[i]<'0' || iban[i]>'9')
                     return 0;
              i++;
       }
       while(i<8)
       {
              if(iban[i]<'A' || iban[i]>'Z')
                     return 0;
              i++;
       }
       while(iban[i]!=NULL)
       {
               if((iban[i]<'A' || iban[i]>'Z')&&(iban[i]<'0'|| iban[i]>'9'))
                     return 0;
               i++;
        }
        return 1;
}
int mod10n97(int n)
{
       int i;
        int zece=1;
        for(i=0;i<n;i++)
               zece=(zece*10)%97;
        return zece;
}
int mod1097(char *iban)
{
       int i;
        int s=0;
       int n=lungime(iban);
        for(i=0;i<n;i++)
        {
               s=(s+mod10n97(n-1-i)*(iban[i]-'0'))%97;
        }
       return s;
}
void muta4(char *iban)
{
        int i;
        int n=lungime(iban);
       for(i=0;i<4;i++)
       {
              adaug(iban[0],n,iban);
              sterge(0,iban);
       }
        iban[n]=NULL;
}
int validare(char *iban)
{
        muta4(iban);
        inlocuire(iban);
        if(mod1097(iban)==1)
              return 1;
       else
              return 0;
}
void main()
{
       char *iban;
       cout<<"\niban=";gets(iban);
       spatii(iban);
       if(este_iban(iban))
       {
              if(validare(iban))
             {
                     cout<<"\ncodul iban este valid";
             }
             else
             {
                     cout<<"\ncodul iban nu este valid";
              }

       }
       else
             cout<<"\ncodul introdus nu este de tip iban";
getch();

}