BluePink BluePink
XHost
Oferim servicii de instalare, configurare si monitorizare servere linux (router, firewall, dns, web, email, baze de date, aplicatii, server de backup, domain controller, share de retea) de la 50 eur / instalare. 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();

}