![]() |
Pe HaiSaRadem.ro vei gasi bancuri, glume, imagini, video, fun, bancuri online, bancuri tari, imagini haioase, videoclipuri haioase, distractie online. Nu ne crede pe cuvant, intra pe HaiSaRadem.ro ca sa te convingi. |
Codul de 10 cifre este impartit in patru parti variabile ca lungime :
Codul ISBN-10 va fi prefixat cu 978 si i se va recalcula cifra de control. Dupa ce se vor epuiza toate codurile ISBN-10 , urmatoarele coduri ISBN-13 se vor prefixa cu 979.
Pasul preliminar: Se elimina spatiile si cratimele. Ultima cifra se ignora (este cifra de control).
Pasul 1: Se inmulteste fiecare cifra cu ponderea asociata ei. Ponderile se atribuie pentru fiecare cifra, incepand cu prima cifra, sub forma 1,3,1,3...
Ponderi | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 |
ISBN | 9 | 7 | 8 | 0 | 9 | 0 | 1 | 6 | 9 | 0 | 6 | 6 | 1 |
Valori | 9 | 21 | 8 | 0 | 9 | 0 | 1 | 18 | 9 | 0 | 6 | 18 | 1 |
Pasul 2: Se aduna valorile obtinute
Pasul 3: Se imparte suma obtinuta la 10 si se extrage restul (MODULO 10).
Pasul 4: Daca restul este 0 atunci cifra de control trebuie sa fie 0.Daca restul este diferit de 0, atunci se scade restul obtinut din 10. Rezultatul reprezinta cifra de control. Pentru un ISBN-13 valid cifra de control rezultata va trebui sa fie egala cu ultima cifra a codului (cifra 13).
Pasul preliminar: Se elimina spatiile si cratimele. Ultimul caracter se ignora (este caracterul de control).
Pasul 1: Se inmulteste fiecare cifra cu ponderea asociata ei. Ponderile se atribuie pentru fiecare cifra, incepand cu prima cifra, sub forma (11-pozitia cifrei)
Ponderi | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
ISBN | 0 | 9 | 4 | 0 | 0 | 1 | 6 | 6 | 1 |
Valori | 0 | 81 | 32 | 0 | 0 | 5 | 24 | 18 | 2 |
Pasul 2: Se aduna valorile obtinute
Pasul 3: Se imparte suma obtinuta la 11 si se extrage restul (MODULO 11).
Pasul 4: Daca restul este 0 atunci caracterul de control trebuie sa fie 0.Daca restul este 10 atunci caracterul de control este 'X'. Daca restul este diferit de 0, atunci se scade restul obtinut din 11. Rezultatul reprezinta caracterul de control. Pentru un ISBN-10 valid caracterul de control rezultat va trebui sa fie egal cu ultimul caracter al codului (caracterul 10).
#include<conio.h>
#include<iostream.h>
#include<stdio.h>
void elimina(int poz,char *isbn)
{
int i;
for(i=poz;isbn[i+1]!=NULL;i++)
isbn[i]=isbn[i+1];
isbn[i]=NULL;
}
void ignora(char *isbn)
{
int i;
for(i=0;isbn[i+1]!=NULL;i++);
isbn[i]=NULL;
}
int cifra(char *isbn)
{
int i;
for(i=0;isbn[i+1]!=NULL;i++);
return isbn[i]-'0';
}
void preliminar(char *isbn)
{
int i;
for(i=0;isbn[i]!=NULL;i++)
{
if(isbn[i]==' ' || isbn[i]=='-')
elimina(i,isbn);
}
}
int lungime(char *isbn)
{
int i;
for(i=0;isbn[i]!=NULL;i++);
return i;
}
void depla3(char *isbn)
{
int n=lungime(isbn);
int i;
for(i=n+2;i>=3;i--);
isbn[i]=isbn[i-2];
}
void prefix10(char *isbn)
{
depla3(isbn);
isbn[0]='9';
isbn[1]='7';
isbn[2]='8';
}
void prefix13(char *isbn)
{
depla3(isbn);
isbn[0]='9';
isbn[1]='7';
isbn[2]='9';
}
int isbn13(char *isbn)
{
int p=1;
int s=0;
int c=cifra(isbn);
for(int i=0;isbn[i+1]!=NULL;i++)
{
s=(s+(isbn[i]-'0')*p)%10;
p=-p+4;
}
if(s==0)
{
if(s==c)
return 1;
else
return 0;
}
else
{
s=10-s;
if(s==c)
return 1;
else
return 0;
}
}
int isbn10(char *isbn)
{
int s=0;
int c=cifra(isbn);
int p=10;
int i;
for(i=0;isbn[i+1]!=NULL;i++)
{
s=(s+(isbn[i]-'0')*p)%11;
p--;
}
if(s==0)
{
if(s==c)
return 1;
else
return 0;
}
else
{
if(s==10)
{
if(isbn[9]=='X')
return 1;
else
return 0;
}
else
{
s=11-s;
if(s==c)
return 1;
else
return 0;
}
}
}
void main()
{
char *isbn;
cout<<"ISBN";gets(isbn);
preliminar(isbn);
if(lungime(isbn)==10)
{
cout<<"\n este un ISBN10";
if(isbn10(isbn))
cout<<"\nISBN valid";
else
cout<<"\nISBN invalid";
}
else
{
if(lungime(isbn)==13)
{
cout<<"\n este un ISBN13";
if(isbn13(isbn))
cout<<"\nISBN valid";
else
cout<<"\nISBN invalid";
}
else
{
cout<<"\nNu exista un ISBN de aceasta lungime";
}
}
}