Rechnen mit Rest (modulo) in PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bank
begrenzte anzahl
berechnung
bit
brauche
code
country
dank
ermitteln
erstellung
funktion
geld
halber verweise
http
parameter
redaktion
relativ sicher feststellen
rest
url
zahl
-
Hallo
ich möchte die Prüfsumme für Erstellung der IBAN ermitteln, BSP siehe HIER
bis Prüfsumme alles OK,
aber bei "Prüfsumme Modulo 97" kommt bei mir 78 raus anstatt 90 wie im BSP ?!
wenn ich am Taschenrechner brechne:
700901001234567890131400 MOD 97 = 90
aber wenn ich am Webspace mit PHP das brechne:
$modulo = (700901001234567890131400 % 97); // --- Erbebnis: 78
unterschiedliche Ergebnisse ? ... der Wert: 90 müsste richtig sein,
... was ist mit % in PHP anders ... sollte doch auch 90 sein ?!
PS: gibt es eine kostenlose API zum ermitteln der BIC + IBAN
(mit Parameter: Ländercode, BLZ und KTO-Nr)
die ich gefunden habe wollen Geld für API-Calls :(
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist auch relativ logisch... Mit Javascript kommt zB 38 raus.
Folgendes: Der Datentyp Integer hat eine begrenzte Anzahl von Bits zur Verfügung. In der Regel ist dies 2^31 Bits, was nur bummelige 2mrd sind. Deine Zahl mit 700.901.001.234.567.890.131.400 braucht aber mindestens 80 Bit, vorzeichenbehaftet 81 Bit, um gespeichert zu werden. Raus kiegst du das, wenn du ld(700901001234567890131400) rechnest.
Das heißt, du musst die Zahl als String halten, und sie vorher zerlegen und verarbeiten, sodass du die wirklich verarbeitete Zahl nur im Bereich der 31 Bits hast.
Der Einfachheit halber Verweise ich auf http://www.michael-schummel.de/2007/10/05/iban-prufung-mit-php/
Liebe Grüße -
Danke
... mit PHP bcmod() funktioniert es wohl auch mit sooo großen Zahlen
hier meine Funktion:
// --------------------------------------------------------------------- function make_iban($blz, $kto, $country='DE') { $blz8 = str_pad ( $blz, 8, '0', STR_PAD_RIGHT); $kto10 = str_pad ( $kto, 10, '0', STR_PAD_LEFT); $bban = $blz8 . $kto10; $country = strtoupper($country); $ncc1 = (ord($country[0]) - 64) + 9; $ncc2 = (ord($country[1]) - 64) + 9; $ckey = $ncc1.$ncc2.'00'; $pruefsumme = $bban . $ckey; $modulo = bcmod($pruefsumme,97); $pruefziffer = str_pad ( 98 - $modulo, 2, '0', STR_PAD_LEFT); $iban = $country . $pruefziffer . $bban; return $iban; } // ---------------------------------------------------------------------
jetzt brauche ich noch eine Liste der BIC (Business Identifier Code)
... für Deutschlad Daten gefunden, aber der ganze Rest der Welt ?
Beitrag zuletzt geändert: 4.11.2013 7:02:56 von myvotes -
Da wirst du so ohne weiteres gar nichts finden.
Die offizielle DB dazu findest du hier: https://www2.swift.com/directories/
Allerdings musst du eine Bank sein um dir das herunterladen zu können
Da kannst du mir durchaus glauben, da ich selbst für Banken gearbeitet habe und wir genau aus diesem Grund immer eigene Repositories benutzt haben.
Diese internen Repositories enthielten dann alle wichtigen BICs, das heißt vor allem die BICs für die Kanalinseln wie z.B. Jersey und die französischen Überseegebiete wie z.B. Mauritius, da die Ländercodes dieser Gebiete von denen der IBANs abweichen. Bei allen anderen BICs kann man die BICs einer Plausibilitätsprüfung unterziehen und damit relativ sicher feststellen, ob diese korrekt sind.
Wie gesagt, man findet das Repository für Deutschland, das du ja auch schon verlinkt hast und auch noch ein paar andere aber nicht alle, ist leider so.
Alternativ gibt es aber im Internet einige Seiten, auf denen man BICs erfragen kann, eventuell bietet ja eine davon eine API an, die du nutzen könntest, z.B. über REST oder SOAP.
Mit freundlichen Grüßen
* Edit: Link verlinkt
Beitrag zuletzt geändert: 3.11.2013 15:22:20 von nemoinho -
Danke für die Info
ok, also für wirklich ALLE Länder brauche ich die BIC nun auch nicht,
die für Europa (+ USA + Canada) würden mir schon ausreichen
ich habe auch schon so APIs (mit REST / SOAP) gefunden,
aber die wollen Geld für die API-Anfragen, das kommt nicht in Frage
Habe noch eine Ergänzung zu meiner Funktion make_iban()
.... Fehler wenn Ländercode in Kleinbuchstaben übergeben wird ($country='de')
daher noch oben mit rein:$country = strtoupper($country);
denn die Berechnung der Länder-Zahl $ckey geht von ASCIi Großbuchstaben aus
... hab's mit EDIT oben eingefügt.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage