Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int ISBN13(char* c);
- int main(void)
- {
- char number[10000];
- char *pointer=number;
- printf("Please insert International Standard Book Number\n");
- pointer = fgets(number,10000,stdin); //Overflow zbog prevelikog broja znakova je tu nemoguće izbjeći jer se ne smije koristiti dinamička alokacija memorije
- printf("%d",ISBN13(pointer));
- return 0;
- }
- int ISBN13(char* number){
- char* temp =number;
- int length=0, digitsNumber=0, hyphensNumber=0;
- int prefixSize=0, regGroupSize=0, regElSize=0, pubElSize=0, checkDigitSize=0;
- char prefix[10000],regGroup[10000],regEl[10000],pubEl[10000],checkDigit[10000];
- for(;*temp!='\0' && *temp!=10 ;temp++){
- length++;
- if(*temp==45){
- hyphensNumber++;
- }
- else if(*temp>=48 && *temp<=57){
- digitsNumber++;
- if(hyphensNumber<1){
- prefix[prefixSize]=*temp;
- prefix[++prefixSize]='\0';
- }
- if(hyphensNumber==1){
- regGroup[regGroupSize]=*temp;
- regGroup[++regGroupSize]='\0';
- }
- if(hyphensNumber==2){
- regEl[regElSize]=*temp;
- regEl[++regElSize]='\0';
- }
- if(hyphensNumber==3){
- pubEl[pubElSize]=*temp;
- pubEl[++pubElSize]='\0';
- }
- if(hyphensNumber==4){
- checkDigit[checkDigitSize]=*temp;
- checkDigit[++checkDigitSize]='\0';
- }
- }
- else{
- return -1;
- }
- }
- if(digitsNumber!=13){
- return -2;
- }
- if(hyphensNumber!=4){
- return -3;
- }
- if(prefixSize!=3){
- return -4;
- }
- else{
- if(prefix[0]!='9' || prefix[1]!='7' || (prefix[2]!='8' && prefix[2]!='9')){
- return -4;
- }
- }
- if(regGroupSize<1 || regGroupSize>5){
- return -5;
- }
- if(regElSize>7){
- return -6;
- }
- if(pubElSize>6){
- return -7;
- }
- if((regGroupSize+regElSize+pubElSize)!=9){
- return -8;
- }
- if(checkDigitSize!=1){
- return -9;
- }
- else{
- int sum = 0;
- int multiplier=1;
- for(int i=0;i<prefixSize;i++){
- sum = sum +(prefix[i]-48)*multiplier;
- if(multiplier==1){
- multiplier=3;
- }
- else{
- multiplier=1;
- }
- }
- for(int i=0;i<regGroupSize;i++){
- sum = sum +(regGroup[i]-48)*multiplier;
- if(multiplier==1){
- multiplier=3;
- }
- else{
- multiplier=1;
- }
- }
- for(int i=0;i<regElSize;i++){
- sum = sum +(regEl[i]-48)*multiplier;
- if(multiplier==1){
- multiplier=3;
- }
- else{
- multiplier=1;
- }
- }
- for(int i=0;i<pubElSize;i++){
- sum = sum +(pubEl[i]-48)*multiplier;
- if(multiplier==1){
- multiplier=3;
- }
- else{
- multiplier=1;
- }
- }
- int mod = sum % 10;
- int digit = 10-mod;
- if(digit!= checkDigit[0]-48){
- return -9;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement