 |
29.07.2009 13:35 |
|
Síemenshandyfan
 Junior Guru
Registriert seit: 10/2004
Beiträge: 2496
Threadersteller
|
Formel Prüfsumme Überweisung o2
Hallo Leute!
Ich bin grad etwas am grübeln. Wir haben zwar selber den Prüfsummenrechner für o2 mit auf dem Prepaid-Wiki. Was mich aber interessieren würde: woraus errechnet sich diese 4stellige Prüfsumme, die zur Überweisung notwendig ist bzw. kennt jemand die Formel hierzu? Ich würde das gerne in einer Exel-Tabelle zur Berechnung verwenden, komme aber nicht wirklich dahinter.
Vielleicht kann sich ein Experte ja mal den HTML-Quellcode anschauen, dort müsste doch das "Geheimnis" zu entschlüsseln sein, oder?
Bye, Mike
__________________
Tips&Tricks zum Thema Prepaidkarten gib's im Prepaid-Wiki: www.prepaid-wiki.de
Änderungen fürs Prepaid-Wiki melden
ICQ: 453949257
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
29.07.2009 22:52 |
|
ejunky
 Junior Profi
Registriert seit: 09/2005
Beiträge: 397
|
hört sich auch ein bißchen geheimnisvoll an. hab noch nicht von diesem Prüfsummenkram gehört. soll damit die zuordnung der zahlung garantiert werden? und willst du ohne dieses gesimse deine zahlungen regeln? ist diese prüfsumme rein mobilfunknummerabhängig?
EDIT: wenns nicht zu viel ist kannst du den code oder die betrefende stelle ja reinkopieren
Geändert von ejunky am 29.07.2009 um 22:56
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
29.07.2009 23:21 |
|
wgot
 Senior Profi
Registriert seit: 07/2002
Beiträge: 1169
|
Hallo,
Zitat: Original geschrieben von ejunky
soll damit die zuordnung der zahlung garantiert werden?
genau, ohne oder mit falschen Prüfziffern kommt die Überweisung zurück.
Zitat: willst du ohne dieses gesimse deine zahlungen regeln?
Das kann er schon, hat doch im prepaid-wiki den Prüfsummererzeuger:
http://prepaid-wiki.de/index.php5?t...9Cberweisung_O2
Keine Ahnung wo der her ist. Die auf 0176 kastrierte Variante gibt's öffentlich bei Tchibo.
Die Prüfziffern scheinen was ganz hausbackenes zu sein, kein offizieller Code. Wer ihn in einer anderen Programmiersprache braucht wird wohl das JavaScript übersetzen müssen.
Gruß, Wolfgang
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
|  |
 |
30.07.2009 00:16 |
|
JHV
 Senior Guru
Registriert seit: 01/2003
Beiträge: 4774
|
Code:
function getChecksum()
{
src = document.getElementById("vzweck");
msisdn = '0176'+ document.getElementById("vzweck").value;
l = msisdn.length;
if(l!=11 && l!=12)
{
// Fehlermeldung ausgeben
wronChecksum();
} else {
var d1 = 0;
var d2 = 0;
var d3 = 0;
var d4 = 0;
var z = 0;
var d4mul = 1;
for(i=0; i<l; i++)
{
c = msisdn.charAt(i);
if(c<'0' || c>'9')
{
// Fehlermeldung ausgeben
wronChecksum();
break;
}
value = c-'0';
d1 ^= value;
if(i%2==0) {
z = 2*value;
if(z>9) z -= 9;
}
else z = value;
d2 += z;
d3 += value;
d4 += value*d4mul;
if(++d4mul>9) d4mul = 1;
}
if(d1>9) d1 -= 6;
d2 %= 10;
d3 %= 10;
d4 %= 10;
chars = new Array(4);
chars[0] = d1;
chars[1] = d2;
chars[2] = d3;
chars[3] = d4;
checksum = new String(chars.join(""));
newText = '<strong>0176-'+ document.getElementById("vzweck").value +'-'+ checksum +'</strong>';
//Tabellenzelle inputCell ausrichten wie in der klasse inputCell
document.getElementById("inputCell").style.verticalAlign = "middle";
document.getElementById("inputCell").style.height = "54px";
document.getElementById("vzweckcopy").value = '0176-'+ document.getElementById("vzweck").value +'-'+ checksum;
// ggf. Fehlermeldung wieder ausblenden
document.getElementById("vzweck").className = "input";
document.getElementById("vzweck").value = "";
document.getElementById("vzerror").innerHTML = "";
document.getElementById("vzerror").className = "hide";
// für die erste Ausgabe
document.getElementById("uevzweck").innerHTML = newText;
// für die Überweisung
document.getElementById("uevzwecktd").innerHTML = "Ihre Überweisungsdaten sind nun vollständig.";
// Berechnung erfolgreich
javascript  opup_show();
}
}
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
30.07.2009 01:19 |
|
JHV
 Senior Guru
Registriert seit: 01/2003
Beiträge: 4774
|
Die 4 Stellen der Prüfnummer werden nach 4 verschiedenen Algorithmen aus allen 12 Ziffern der Rufnummer (einschl. Vorwahl '0176') berechnet:
1. Stelle:
Alle Ziffern werden XOR verknüpft.
Falls Ergebnis > 10, wird 6 abgezogen.
2. Stelle:
Summe aller Ziffern, wobei die geraden Positionen verdoppelt werden (minus 9)
3. Stelle:
Summe aller Ziffern
4. Stelle:
Summe aller Ziffern, jedoch wird die erste Ziffer mit 1 multipliziert, die zweite mit 2 ... die zehnte Ziffer wieder mit 1 usw.
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
30.07.2009 09:07 |
|
Síemenshandyfan
 Junior Guru
Registriert seit: 10/2004
Beiträge: 2496
Threadersteller
|
Zitat: Original geschrieben von JHV
Die 4 Stellen der Prüfnummer werden nach 4 verschiedenen Algorithmen aus allen 12 Ziffern der Rufnummer (einschl. Vorwahl '0176') berechnet:
1. Stelle:
Alle Ziffern werden XOR verknüpft.
Falls Ergebnis > 10, wird 6 abgezogen.
2. Stelle:
Summe aller Ziffern, wobei die geraden Positionen verdoppelt werden (minus 9)
3. Stelle:
Summe aller Ziffern
4. Stelle:
Summe aller Ziffern, jedoch wird die erste Ziffer mit 1 multipliziert, die zweite mit 2 ... die zehnte Ziffer wieder mit 1 usw.
Okay, das scheint der richtige Lösungsansatz zu sein, auch wenn ich es auf die Schnelle noch nicht zu 100% verstehe. Aber so eine komplexe Berechnung dürfte schwierig in Exel integrierbar zu sein, oder?
Bye, Mike
__________________
Tips&Tricks zum Thema Prepaidkarten gib's im Prepaid-Wiki: www.prepaid-wiki.de
Änderungen fürs Prepaid-Wiki melden
ICQ: 453949257
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
30.07.2009 22:28 |
|
Carponaut_Stefan
 Senior Profi
Registriert seit: 10/2007
Beiträge: 1469
|
Hallo Mike,
komplex nicht unbedingt aber vielleicht ein wenig kompakt. Probier mal bitte meine folgende Excel/Oo-"Formelsammlung" aus:
Zelle A1, komplette Rufnummer, z.B:
017612345678
Mit der rechten Maustaste gibt man Zelle A1 folgendes Format ( --> Zelle formatieren --> Reiter Zahl -->benutzerdefiniert):
\000000000
Dadurch wird immer eine führende Null dargestellt.
B1:
=WERT(TEIL(TEXT($A$1;"\000000000000");(ZELLE("ROW";B1));1))
Durch Ziehen diese Formel in alle Zellen bis B12 bringen. So Ziehen, dass die relativen Bezüge automatisch angepasst werden.
C1: (bis C12 ziehen)
=WENN(ISTLEER(B1);"";WENN(ISTGERADE(ZELLE("ROW";C1)-1); 1;0)* (2*WERT(B1) -(WENN(2*WERT(B1)>9;9;0))))
D1 (bis D12 z.)
=WENN(ISTUNGERADE(ZELLE("ROW";D1)-1); WERT(B1);0)
In E1 schreibt man als Initialisierung schlicht
0
hinein.
E2 (bis E15 z.) :
=BININDEZ(WECHSELN(DEZINBIN(E1)+DEZINBIN(B2);2;0))
F1 (bis F15 ziehen):
=B1*(REST(ZELLE("ROW";F1)-1;9)+1)
G1:
=E15-WENN(E15>9;1;0)*6
G2:
=REST((SUMME(C1:C14)+SUMME(D1:D14));10)
G3:
=REST(SUMME(B1:B14);10)
G4:
=REST(SUMME(F1:F15);10)
Alle 4 Ziffern zu einer Zahl rekombiniert man mit einer zusätzlichen Formel in H1:
=G1*1000+G2*100+G3*10+G4
Vielleicht wirken die Formeln etwas kompakt dennoch hoffe ich dass durch die Aufteilung auf Spalten die einzelnen Arbeitsschritte etwas transparenter geworden sind. Eine sportliche Aufgabe wäre sicherlich, das ganze ohne Makro in einer einzigen Formelzeile zu erledigen .-......... :D
Verwendete Quellen:
http://www.excelformeln.de/formeln.html?welcher=314
http://www.office-loesung.de/ftopic62953_0_0_asc.php
http://www.telefon-treff.de/showthr...266#post3759266
sowie die sehr instruktive Erläuterung des TT-Users JHV auf:
http://www.telefon-treff.de/showthr...291#post3759291 :D
PS: weiss jemand wie man den Formelgehalt einer einzelnen Tabelle extrahieren und schön als Code-Quelltext darstellen kann? Nicht so:
http://www.schmittis-page.de/index....cel/faq/f10.htm
Geändert von Carponaut_Stefan am 30.07.2009 um 23:43
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
31.07.2009 00:02 |
|
Síemenshandyfan
 Junior Guru
Registriert seit: 10/2004
Beiträge: 2496
Threadersteller
|
Zitat: Original geschrieben von Carponaut_Stefan
Hallo Mike,
komplex nicht unbedingt aber vielleicht ein wenig kompakt. Probier mal bitte meine folgende Excel/Oo-"Formelsammlung" aus:
Hey Stefan!
Das probier ich die Tage mal aus.
Cool wäre es dann noch, wenn man aus einer solchen Exel-Tabelle z.b. mit 10... Nummern die entsprechenden Rufnummern+Prüfziffern extrahieren und als DTA exportieren könnte...um selbiges dann als Sammelüberweisung wiederum in ein Bankingprogramm zu importieren. Natürlich immer mit 1 Cent als Überweisungsssumme und o2 als Empfänger. Krönung wäre dann noch, die einzelnen Rufnummern in die Exel-Tabelle oder eine andere Programmroutine per Barcodescanner einzulesen und somit einen kompletten Automatismus zu erreichen...
Also praktisch so: Barcodescanner liest ein, Programm errechnet die Betreffzeile und generiert den Überweisungsträger. Dann mit der nächsten Karte wieder u.s.w. Das schwebt mir im Moment jedenfalls als "Endziel" vor...
Bye, Mike
__________________
Tips&Tricks zum Thema Prepaidkarten gib's im Prepaid-Wiki: www.prepaid-wiki.de
Änderungen fürs Prepaid-Wiki melden
ICQ: 453949257
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
31.07.2009 10:28 |
|
Carponaut_Stefan
 Senior Profi
Registriert seit: 10/2007
Beiträge: 1469
|
Nun gut!
Nachdem das Problem hinsichtlich Prüfsumme als gelöst gelten darf, bleiben noch zwei Fragen:
- ob der erweiterten Fragestellung vielleicht jemand anders, z.b. der User JHV, seine freundliche Aufmerksamkeit zuwenden mag?
- ob dieser Thread vielleicht besser im Unterforum "Webdesign & Programmierung" aufgehoben wäre?

Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
03.08.2009 17:04 |
|
Evilandi666
 Guru
Registriert seit: 01/2007
Beiträge: 3261
|
@Stefan
ich hab das gerade mal probiert, bei mir in Excel 2007 tut das mal nicht, er zeigt in jedem Feld 0 an.
Aber vermutlich liegt das eher daran das ich Excel nie benutze 
Brauchs auch nicht, habs nur mal getestet 
__________________
Aktuell im VK: HTC Desire mit 2 Dockingstations und Fitbag Tasche
Meilensteine der Handygeschichte: Nokia 3210 - Siemens SL45 - Nokia 3650 - SE K750i - Nokia N95 - Apple iPhone
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
07.08.2011 16:11 |
|
Bongomann
 Profi
Registriert seit: 10/2004
Beiträge: 509
|
Klappt das obige Beispiel bei jemandem? Bei mir stimmt die Prüfsumme nicht. IMHO passen die Formeln auch nicht zur Beschreibung...
Ich habe den o.g. JavaScript-Code mal in VBA überführt. Vielleicht kann das ja einer gebrauchen. Da sind zwar die Prüfungen nicht mehr drin, aber es funktioniert.
Code:
Option Explicit
Sub o2_berechnung()
Dim d1, d2, d3, d4, d4mul, lauf, wert, z As Byte
Dim c As String
Const nummer = "xxxxxxxxxxx"
d4mul = 1
For lauf = 0 To Len(nummer) - 1
c = Mid(nummer, lauf + 1, 1)
wert = Val(c)
d1 = wert
If lauf Mod 2 = 0 Then
z = 2 * wert
If z > 9 Then
z = z - 9
End If
Else: z = wert
End If
d2 = d2 + z
d3 = d3 + wert
d4 = d4 + wert * d4mul
d4mul = d4mul + 1
If d4mul > 9 Then d4mul = 1
Next
If d1 > 9 Then
d1 = d1 - 6
End If
d2 = d2 Mod 10
d3 = d3 Mod 10
d4 = d4 Mod 10
c = d1 & d2 & d3 & d4
Debug.Print (c)
End Sub
__________________
Fette Weiber knallen ist wie Mofa fahren, macht solange Spaß, bis dich jemand dabei sieht.
Grammar is important. Capitalisation is the difference between helping your Uncle Jack off a horse & helping your uncle jack off a horse.
Geändert von Bongomann am 07.08.2011 um 17:27
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
24.02.2012 20:13 |
|
sorim
 Junior Mitglied
Registriert seit: 06/2011
Beiträge: 15
|
Bei mir klappt der VBS Code nicht ganz.
Die erste Prüfnummer ist immer die letzte Nummer der Handy-Nummer.
Die anderen 3 Prüfnummern scheinen zu stimmen.
Ich glaube hier ist der Fehler:
statt:
d1 = Wert
muß stehen:
d1 = d1 xor wert
__________________
Gruß,
Sorim
Geändert von sorim am 24.02.2012 um 20:36
Diesen Beitrag melden | IP | Link zum Beitrag
|
|
|  |
 |
| Alle Zeitangaben in WEZ +1 Stunde. Es ist 15:21 Uhr. |
Schliessen
|
 |
|
|
|  |
Forum Regeln:
Es ist Dir nicht erlaubt, neue Beiträge zu schreiben.
Es ist Dir nicht erlaubt, auf Beiträge zu antworten.
Es ist Dir nicht erlaubt, Anhänge anzufügen.
Es ist Dir nicht erlaubt, Deine Beiträge zu bearbeiten.
|
HTML Code ist ausgeschaltet
vB Code ist angeschaltet
Smilies sind angeschaltet
[IMG] Code ist angeschaltet
|
|
|
|
|
|
|