Javascript to C++
-
Ich habe hier auf meiner seite ein Programm zum ermitteln einer Prüfsumme leider bekomme ich statt 8 minus 1 raus auf meiner Webseite geht es
numero ist das Value feld mit dem Wert : 425076610001
rest ist die erechnete Prüfsumme mit dem Wert : 8
ergebnis ist der zusammengesetzte wert : 4250766100018Hier der Javascript
faktor = 3; summe = 0; for (i = form.numero.value.length; i > 0; --i) { summe = summe + form.numero.value.substring (i-1, i) * faktor; faktor = 4 - faktor; } rest = ((1000 - summe) % 10); form.ergebnis.value = form.numero.value + rest; result = form.ergebnis.value; form.rest.value = rest;
in C++ habe ich es umgewandelt komme aber nicht weiter C Code
Dies erhalte ich mit den umgesetzten Code :Numero ist das Value feld mit dem Wert : 425076610001
Rest ist die erechnete Prüfsumme mit dem Wert : -1
Ergebnis ist der zusammengesetzte wert : 425076610001**-1**void __fastcall TForm1::Button2Click(TObject *Sender) { int faktor = 3; int summe = 0; for (int i = Numero->Text.Length(); i > 0; --i) { summe = summe + Numero->Text.SubString(i-1, i) * faktor; faktor = 4 - faktor; } int rest = ((1000 - summe) % 10); Ergebnis->Text = Numero->Text + rest; Rest->Text = rest; }
Wäre über eine Hilfe dankbar
-
Hallo
Es wäre hilfreich, wenn du den Algorithmus für die Prüfsumme ansich erklärst/verlinkst anstelle die Javascript-Implementation zu zeigen...
Zumindestens das der Rest in deiner C++ Implementation negativ ist, überrascht nicht : In summe wird eine Zahl aufgebaut, die größer ist als 1000. Deshalb ergibt die Formel mit dem modulo auf jedenfall eine negative Zahl. Wendet javascript hier automatisch eine abs-Funktion an?
Außerdem weiß ich nicht wie on javascript die String-Zeichen nummeriert werden? Im Builder werden die zeichen des Datentypes Strings ab 1 gezählt, nicht ab 0 wie sonst üblich.bis bald
akari
-
So baut sich es auf
a) ' 4 2 5 0 7 6 6 1 0 0 0 1
b) x 1 3 1 3 1 3 1 3 1 3 1 3
c) = 4 6 5 0 7 18 6 3 0 0 0 3
d) Produktsumme 52
e) aufrunden auf 60
f) 52 + 8 = 60, 8 = PrüfzifferZu a) Schreibe nebeneinander die Ziffern der betreffenden Generierten Nummer (ausgenommen der letzten, der noch zu ermittelnden Prüfziffer).
Zu b) Setze darunter von rechts nach links (wichtig) abwechselnd die Multiplikatoren 3 und 1.
Zu c) Multipliziere a) mit b) und erhalte die einzelnen Produkte in c).
Zu d) Addiere die Ergebnisse von c) und erhalten die Produktsumme in d).
Zu e) Die Differenz (Aufrundung) dieser Summe auf den nächsten vollen "Zehner" ergibt die Prüfziffer. Ist die Differenz Null, ist auch die Prüfziffer Null.
Zu f) Die Prüfziffer ist in meinem Beispiel die Ziffer 8.
-
void __fastcall TForm1::Button2Click(TObject *Sender) { int faktor = 3; int summe = 1; for (int i = Numero->Text.Length(); i > [b]1[/b]; --i) //habe aus 0 =1 gemacht { summe = summe + Numero->Text.SubString(i-1, i) * faktor; faktor = 4 - faktor; } int rest = ((1000 [b]+[/b] summe) % 10); //habe aus - ein + gemacht Ergebnis->Text = Numero->Text + rest; Rest->Text = rest; }
So funktioniert es :
faktor = (4 - faktor)+5;von der reihe 425076610001 bis 425076610009
ab der Reihe 425076610010 bis 425076610019
ist der Prüfwert immer +1 höher das heisst wenn
425076610010 ist dann solllte der wert 0 ergeben ergibt aber 1
425076610011 ist dann solllte der wert 7 ergeben ergibt aber 8 uswab 20
425076610020 ist dann solllte der wert 0 ergeben ergibt aber 2
425076610021 ist dann solllte der wert 3 ergeben ergibt aber 5 uswIch vermute mal das wird unter javascript anderst gelöst macht es dann halt ein Sinn abzufragen und wenn der 10 oder 100 oder 1000 Reihe immer den jeweiligen Zähler dazu zu rechnen oder kann man dies villeicht anderst lösen .
-
weiss keiner ein Rat