Ankündigung

Einklappen
Keine Ankündigung bisher.

Formel Prüfsumme Überweisung o2

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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 * www.prepaid-wiki.at
    Änderungen für's Prepaid-Wiki.de melden * Änderungen für's Prepaid-Wiki.at melden

  • #2
    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
    Zuletzt geändert von ejunky; 29.07.2009, 21:56.

    Kommentar


    • #3
      Hallo,

      Original geschrieben von ejunky
      soll damit die zuordnung der zahlung garantiert werden?
      genau, ohne oder mit falschen Prüfziffern kommt die Überweisung zurück.
      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?ti...Cberweisung_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

      Kommentar


      • #4
        Edit: zu spät!
        Die betreffende (Fund-)Stelle:
        http://www.prepaid-wiki.de/index.php...rweisung_Fonic
        http://www.prepaid-wiki.de/index.php...Cberweisung_O2
        http://www.prepaid-wiki.de/index.php...sung_Tchibofon
        Ich habe diverse Nummern getestet, die Quersumme war immer eine andere.
        Fonen: Netzclub, Surfen/Fonen: PremiumSIM - Mein 1. Mal anno 2000 - Wird ein Mann laut, ist es dynamisch, wird eine Frau laut, ist sie hysterisch - Ein Mann macht Erfahrungen, eine Frau hat Vergangenheit - Geburtstag(s)feiern: das Zelebrieren der Tatsache, dass man dem Tod ein Stück näher kommt, ist ein seltsamer Brauch - Aus den Trümmern der Verzweiflung bauen wir unseren Charakter - Wer von der Hoffnung lebt, stirbt an Verzweiflung - Abo- & Vertragsfallen/Inkasso-Stalking

        Kommentar


        • #5
          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 &Uuml;berweisungsdaten sind nun vollst&auml;ndig.";
          		
          		// Berechnung erfolgreich
          		javascript:popup_show();
          	}
          }

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              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 * www.prepaid-wiki.at
              Änderungen für's Prepaid-Wiki.de melden * Änderungen für's Prepaid-Wiki.at melden

              Kommentar


              • #8
                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(D114));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 .-.........

                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/showthre...66#post3759266
                sowie die sehr instruktive Erläuterung des TT-Users JHV auf:
                http://www.telefon-treff.de/showthre...91#post3759291


                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.h...el/faq/f10.htm
                Zuletzt geändert von Carponaut_Stefan; 30.07.2009, 22:43.
                Dodge - Aus Freude am Tanken

                Kommentar


                • #9
                  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 * www.prepaid-wiki.at
                  Änderungen für's Prepaid-Wiki.de melden * Änderungen für's Prepaid-Wiki.at melden

                  Kommentar


                  • #10
                    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?

                    Dodge - Aus Freude am Tanken

                    Kommentar


                    • #11
                      Was ist denn die "erweiterte Fragestellung"? Das mit dem Barcodescanner? Na dann viel Spaß.
                      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

                      Kommentar


                      • #12
                        @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

                        Kommentar


                        • #13
                          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
                          Zuletzt geändert von Bongomann; 07.08.2011, 16:27.

                          Kommentar


                          • #14
                            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
                            Zuletzt geändert von sorim; 24.02.2012, 19:36.
                            Gruß,
                            Sorim

                            Kommentar

                            Skyscraper

                            Einklappen
                            Lädt...
                            X