O programa abaixo
lê nove caracteres/dígitos e determina o dígito/caractere verificador de um
ISBN10. As regras são similares às regras do CPF, o último dígito/caractere
deve ser tal que a soma dos dígitos, cada um multiplicado por seu respectivo
peso, (verificador*1+unidade*2+dezena*3+...ultimo*10) é um múltiplo de 11
Os
projetistas do ISBN10 não fizeram adaptação de haver apenas a presença de dígitos
de 0 a 9 como ocorre com o CPF. O ISBN10 utiliza o “dígito” X para
representar o valor 10.
#include <stdio.h>
#include <stdlib.h>
//0-13-110362-8: The C Programming Language
int main(int argc, char *argv[]){
printf("Forneca os 9 digitos
do ISBN-10:");
char d0, d1, d2, d3, d4, d5, d6,
d7, d8;
scanf("%c%c%c%c%c%c%c%c%c",
&d8,&d7,&d6,&d5,&d4,&d3,&d2,&d1,&d0);
int somaprod;
char carVer;
int restoAux;
d0=d0-'0'; d1=d1-'0'; d2=d2-'0';
d3=d3-'0'; d4=d4-'0'; d5=d5-'0';
d6=d6-'0'; d7=d7-'0'; d8=d8-'0';
somaprod=d0*2+d1*3+d2*4+d3*5+d4*6+d5*7+d6*8+d7*9+d8*10;
restoAux=somaprod%11;
carVer=(restoAux==1) ? 'X' : (
(restoAux==0) ? '0' : '0'+(11-restoAux) );
printf("ISBN
%d%d%d%d%d%d%d%d%d", d8,d7,d6,d5,d4,d3,d2,d1,d0);
printf("-%c\n",carVer);
system("PAUSE");
return 0;
}
O programa
abaixo lê doze caracteres e determina o dígito verificador de um ISBN13. A
Abordagem do ISBN13 é bem diferente da base teórica do CPF e do ISBN10 e
portanto as “garantias” de erros de transposição etc são bem
distintas. Observe que os dígitos são multiplicados por 3 ou por 1 sucessivamente,
e que o dígito verificador deve garantir que a soma destes produtos seja divisível
por 10! Neste esquema não se apresenta a questão de haver ou não um caractere
para representar o “dígito 10”.
#include <stdio.h>
#include <stdlib.h>
/* 978-0-306-40615-7
978-0-470-87180-5
*/
int main(int argc, char *argv[]) {
printf("Forneca os 12 digitos
do ISBN-13:");
char d0, d1, d2, d3, d4, d5, d6,
d7, d8, d9,d10,d11;
scanf("%c%c%c%c%c%c%c%c%c%c%c%c",&d11,&d10,&d9,&d8,&d7,&d6,&d5,&d4,&d3,&d2,&d1,&d0);
int somaprod;
int digVer;
int restoAux;
d0=d0-'0'; d1=d1-'0'; d2=d2-'0';
d3=d3-'0'; d4=d4-'0'; d5=d5-'0';
d6=d6-'0'; d7=d7-'0'; d8=d8-'0';
d9=d9-'0'; d10=d10-'0';
d11=d11-'0';
somaprod=d0*3+d1+d2*3+d3+d4*3+d5+d6*3+d7+d8*3+d9+d10*3+d11;
digVer=10-somaprod%10;
printf("ISBN
%d%d%d%d%d%d%d%d%d%d%d%d",
d11,d10,d9,d8,d7,d6,d5,d4,d3,d2,d1,d0);
printf("-%d\n",digVer);
system("PAUSE");
return 0;
}