ISBN alt und neu

Prof. Dr. Dörte Haftendorn Juli 2014  www.mathematik-verstehen.de
Erklärungen weitere Links und  Impressum in der Webversion unten.
https://mathe.web.leuphana.de/codierung/ean/isbn-alt-neu.htm

eanAnhaengenP[eanop_]:=Module[{z,zili,fli,pli,i,prsu,p},
z= eanop*10;
zili=IntegerDigits[z];fli={1,3,1,3,1,3,1,3,1,3,1,3,1};
If[Length[zili]=!=13,Return[Text["EAN ohne Prüfziffer müssen 12 Ziffern sein."]]]; 
pli=Array[f,13];
For[i=1,i<14,i++,
pli[[i]]=zili[[i]]*fli[[i]]    ] (*endfor*); 
prsu=Total[pli];
p=10-Mod[prsu,10];
{z+p,"Prüfsumme ohne p ",prsu}
];

li=eanAnhaengenP[978123456789]
ISBN13=li[[1]]
psuop=li[[3]]

Abfangen englisch

Prepend[{1,2,3},0]

ISBN10op=023456789;

IntegerDigits[ ISBN10op]

ISBN10op<100000000

isbn9=.

If[ISBN10op<100000000,isbn9=Prepend[IntegerDigits[ ISBN10op],0] ,
isbn9=IntegerDigits[ ISBN10op]]

Interaktives Fenster

Manipulate[(*{ isbn9,isbnp,zili,fli,f,pli,prsu,i,p},*)
If[ISBN10op<100000000,isbn9=Prepend[IntegerDigits[ ISBN10op],0] ,
isbn9=IntegerDigits[ ISBN10op]]; (* Abfangen englischer Bücher*)
If[Length[isbn9]=!=9,"Du hast nicht genau 9 Ziffern." ,
If[NumberQ[pz]==True,isbnp=pz,isbnp=10]; (*auch andere Buchstaben als 10 genommen!*)
fli={10,9,8,7,6,5,4,3,2};
pli=Array[f,10];
For[i=1,i<10,i++,
pli[[i]]=isbn9[[i]]*fli[[i]]    ];(*Liste der Produkte*)
pli[[10]]=isbnp; 
(*
If[isbnp=="x|"| isbnp =="X", pli[[10]]=10, If[NumberQ[ToExpression [ isbnp]],pli[[10]]=ToExpression [ isbnp],pli[[10]]=10000]];
*)
prsu=Total[pli]; (* Dies für ISBN10 *)
(* Nun umwandeln in ISBN13 *)
li=eanAnhaengenP[978*10^9+ISBN10op];
ISBN13=li[[1]];
psuop=li[[3]];
(* Ausgabe *)(* der >10000 Fall kann z.Z. nicht vorkommen*)
If[prsu>10000,"In ISBN10 ist der letzte Buchstabe falsch",
{
{"Produkte ",ToString[pli]},
         {If[Mod[prsu,11]==0,
   {"Prüfsumme  ",ToString[prsu], " ok"},                 
   {"Prüfsumme  ", ToString[prsu], " passt nicht, nächster Elfer ist", ToString[prsu-Mod[prsu,11 ]+11]}]},
(*ende If Prüfsumme*)
{"Für ISBN10op gilt ISBN13 = " , ISBN13},
{" mit Prüfsumme o.p.: ",psuop}

}//TableForm(*end Table*)
]], (* Befehlsblock *)
Style["Trage oben eine ISBN10 ohne die Prüfzizzer ein", 12],
{ISBN10op ,123456789},
Style["Trage Prüfziffer ein.", 12],
{{pz,6},{0,1,2,3,4,5,6,7,8,9,X}},
FrameLabel->{{None,"Info\nunten"},{"www.mathematik-verstehen.de","ISBN Buchnummer, aus alt wird neu"}},
LabelStyle->Directive[RGBColor[0.7,0,0],Large, SaveDefinitions->True]
]