American Citizen on Thu, 30 Jan 2025 21:43:39 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

program to verify ISBN numbers (10 digit or 13 digit)


Hello All:

I had to verify some ISBN numbers and didn't know that they actually followed a well ordered scheme for being checked.

For anyone who wants it, here's the GP-Pari program to verify the number or string value (removing the dashes)

{verify_isbn(N)=
my(m10,m13,m,n,sz,z);
m10=[10,9,8,7,6,5,4,3,2,1]~;
m13=[1,3,1,3,1,3,1,3,1,3,1,3,1]~;
if(type(N)=="t_STR",
 m=Vec(N);
 sz=matsize(m)[2];
 n=0;
 for(i=1,sz,if(m[i]!="-",n=concat(n,eval(m[i]));););
 sz=matsize(n)[2];
 n=vector(sz-1,i,n[i+1]);
);
if(type(N)=="t_INT", n=digits(N););
if(default(debug)>0,print("n=",n));
if(matsize(n)[2]==13,
 z=n*m13;
 if(z%10==0,print("Valid ISBN: ",N);,print("Invalid! ",N););
 return;
);
if(matsize(n)[2]==10,
 z=n*m10;
 if(z%11==0,print("Valid ISBN: ",N);,print("Invalid! ",N););
 return;
);
print("Invalid ISBN: ",N);
}