Ich versuche herauszufinden, wie man den Kreditkartentyp nur anhand seiner Nummer erkennt. Kennt jemand einen endgültigen, zuverlässigen Weg, dies zu finden?
algorithm
language-agnostic
e-commerce
Andrew Edvalson
quelle
quelle
Antworten:
Die Kredit- / Debitkartennummer wird als PAN oder primäre Kontonummer bezeichnet . Die ersten sechs Ziffern der PAN stammen aus der IIN oder Emittentenidentifikationsnummer der ausstellenden Bank (IINs wurden früher als BIN - Bankidentifikationsnummern bezeichnet - daher finden Sie in einigen Dokumenten möglicherweise Verweise auf diese Terminologie). Diese sechs Ziffern unterliegen einer internationalen Norm, ISO / IEC 7812 , und können verwendet werden, um den Kartentyp anhand der Nummer zu bestimmen.
Leider ist die aktuelle ISO / IEC 7812-Datenbank nicht öffentlich verfügbar. Es gibt jedoch inoffizielle kommerzielle und kostenlose Listen, auch auf Wikipedia .
Um den Typ anhand der Nummer zu erkennen, können Sie einen regulären Ausdruck wie den folgenden verwenden: Gutschrift für Originalausdrücke
Visa:
^4[0-9]{6,}$
Visa-Kartennummern beginnen mit einer 4.MasterCard:
^5[1-5][0-9]{5,}|222[1-9][0-9]{3,}|22[3-9][0-9]{4,}|2[3-6][0-9]{5,}|27[01][0-9]{4,}|2720[0-9]{3,}$
Vor 2016 beginnen MasterCard-Nummern mit den Nummern 51 bis 55, dies erkennt jedoch nur MasterCard-Kreditkarten . Es gibt andere Karten, die mit dem MasterCard-System ausgestellt wurden und nicht in diesen IIN-Bereich fallen. 2016 werden sie Zahlen im Bereich (222100-272099) hinzufügen.American Express:
^3[47][0-9]{5,}$
American Express-Kartennummern beginnen mit 34 oder 37.Diners Club:
^3(?:0[0-5]|[68][0-9])[0-9]{4,}$
Diners Club-Kartennummern beginnen mit 300 bis 305, 36 oder 38. Es gibt Diners Club-Karten, die mit 5 beginnen und 16 Ziffern haben. Dies ist ein Joint Venture zwischen Diners Club und MasterCard und sollte wie eine MasterCard verarbeitet werden.Entdecken:
^6(?:011|5[0-9]{2})[0-9]{3,}$
Entdecken Sie Kartennummern, die mit 6011 oder 65 beginnen.JCB:
^(?:2131|1800|35[0-9]{3})[0-9]{3,}$
JCB-Karten beginnen mit 2131, 1800 oder 35.Leider gibt es eine Reihe von Kartentypen, die mit dem MasterCard-System verarbeitet werden und nicht im IIN-Bereich von MasterCard liegen (Nummern ab 51 ... 55). Der wichtigste Fall ist der von Maestro-Karten, von denen viele aus den IIN-Bereichen anderer Banken ausgegeben wurden und sich daher im gesamten Nummernraum befinden. Daher kann es am besten sein anzunehmen, dass jede Karte, die nicht von einem anderen Typ ist, den Sie akzeptieren, eine MasterCard sein muss .
Wichtig : Die Kartennummern variieren in der Länge. Beispielsweise hat Visa in der Vergangenheit Karten mit 13-stelligen PANs und Karten mit 16-stelligen PANs ausgegeben. Aus den Unterlagen von Visa geht derzeit hervor, dass möglicherweise Nummern mit 12 bis 19 Ziffern ausgegeben wurden oder ausgegeben wurden. Daher sollten Sie die Länge der Kartennummer nicht überprüfen, außer um sicherzustellen, dass sie mindestens 7 Ziffern hat (für eine vollständige IIN plus eine Prüfziffer, die mit dem vom Luhn-Algorithmus vorhergesagten Wert übereinstimmen sollte ).
Ein weiterer Hinweis: Entfernen Sie vor der Verarbeitung einer Karteninhaber-PAN Leerzeichen und Satzzeichen aus der Eingabe . Warum? Weil es normalerweise viel einfacher ist, die Ziffern in Gruppen einzugeben, ähnlich wie sie auf der Vorderseite einer tatsächlichen Kreditkarte angezeigt werden, d. H.
ist viel einfacher korrekt einzugeben als
Es hat wirklich keinen Vorteil, den Benutzer zu züchtigen, da er Zeichen eingegeben hat, die Sie hier nicht erwarten.
Dies bedeutet auch, dass Sie sicherstellen müssen, dass Ihre Eingabefelder Platz für mindestens 24 Zeichen bieten. Andernfalls wird Benutzern, die Leerzeichen eingeben, der Platz ausgehen. Ich würde empfehlen, dass Sie das Feld breit genug machen, um 32 Zeichen anzuzeigen und bis zu 64 zuzulassen. Das gibt viel Spielraum für Erweiterungen.
Hier ist ein Bild, das etwas mehr Einblick gibt:
UPDATE (2014): Die Prüfsummenmethode scheint keine gültige Methode mehr zu sein, um die Echtheit einer Karte zu überprüfen, wie in den Kommentaren zu dieser Antwort angegeben.
UPDATE (2016): Mastercard implementiert neue BIN-Bereiche ab Ach Payment .
quelle
In Javascript:
Gerätetest:
quelle
Aktualisiert: 15. Juni 2016 (derzeit als ultimative Lösung)
Bitte beachten Sie, dass ich sogar die Stimme für diejenige gebe, die am besten gewählt wurde, aber um klar zu machen, dass dies die regulären Ausdrücke sind, habe ich sie mit Tausenden von echten BIN-Codes getestet. Am wichtigsten ist es, Startzeichenfolgen (^) zu verwenden, da dies sonst in der realen Welt zu falschen Ergebnissen führt!
JCB
^(?:2131|1800|35)[0-9]{0,}$
Beginnen Sie mit: 2131, 1800, 35 (3528-3589)American Express
^3[47][0-9]{0,}$
Beginnen Sie mit: 34, 37Diners Club
^3(?:0[0-59]{1}|[689])[0-9]{0,}$
Beginnen Sie mit: 300-305, 309, 36, 38-39Visum
^4[0-9]{0,}$
Beginnen Sie mit: 4MasterCard
^(5[1-5]|222[1-9]|22[3-9]|2[3-6]|27[01]|2720)[0-9]{0,}$
Beginnen Sie mit: 2221-2720, 51-55Maestro
^(5[06789]|6)[0-9]{0,}$
Maestro wächst immer im Bereich: 60-69 , begann mit / nicht mit etwas anderem, aber ab 5 muss trotzdem als Mastercard codiert werden. Maestro-Karten müssen am Ende des Codes erkannt werden, da einige andere im Bereich von 60-69 liegen. Bitte schauen Sie sich den Code an.Entdecken
^(6011|65|64[4-9]|62212[6-9]|6221[3-9]|622[2-8]|6229[01]|62292[0-5])[0-9]{0,}$
Entdecken Sie ziemlich schwer zu codierende, beginnen Sie mit: 6011, 622126-622925, 644-649, 65In Javascript benutze ich diese Funktion. Dies ist gut, wenn Sie es einem Onkeyup-Ereignis zuweisen und es so schnell wie möglich ein Ergebnis liefert.
Hier können Sie damit spielen:
http://jsfiddle.net/upN3L/69/
Wenn PHP diese Funktion verwendet, werden auch einige Sub-VISA / MC-Karten erkannt:
quelle
Hier ist die Funktion zum Überprüfen des Kreditkartentyps mit Regex, c #
quelle
Überprüfen Sie dies heraus:
http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CC70060A01B
quelle
Vor kurzem brauchte ich solche Funktionen, ich portierte Zend Framework Credit Card Validator auf Ruby. Ruby Gem: https://github.com/Fivell/credit_card_validations Zend Framework: https://github.com/zendframework/zf2/blob/master/library/Zend/Validator/CreditCard.php
Beide verwenden INN-Bereiche zur Erkennung des Typs. Hier können Sie über INN lesen
Demnach können Sie alternativ eine Kreditkarte erkennen (ohne reguläre Ausdrücke, aber unter Angabe einiger Regeln zu Präfixen und möglicher Länge)
Wir haben also die nächsten Regeln für die meisten verwendeten Karten
Durch Suchen des Präfixes und Vergleichen der Länge können Sie dann die Kreditkartenmarke erkennen. Vergessen Sie auch nicht den Luhn-Algorithmus (er wird hier beschrieben http://en.wikipedia.org/wiki/Luhn ).
AKTUALISIEREN
Eine aktualisierte Liste der Regeln finden Sie hier https://raw.githubusercontent.com/Fivell/credit_card_validations/master/lib/data/brands.yaml
quelle
Hier ist der vollständige C # - oder VB-Code für alle Arten von CC-bezogenen Dingen im Codeprojekt.
Dieser Artikel ist seit ein paar Jahren ohne negative Kommentare.
quelle
Kompakte Javascript-Version
quelle
Anatoliy Antwort in PHP:
quelle
Hier ist eine PHP-Klassenfunktion, die CCtype by CCnumber zurückgibt.
Dieser Code validiert die Karte nicht oder führt den Luhn-Algorithmus nicht aus. Versuchen Sie nur, den Kreditkartentyp anhand der Tabelle auf dieser Seite zu ermitteln . Verwendet grundsätzlich die CC-Nummernlänge und das CC-Kartenpräfix, um den CC-Kartentyp zu bestimmen.
quelle
Versuchen Sie nicht, den Kreditkartentyp im Rahmen der Zahlungsabwicklung zu ermitteln. Sie riskieren, gültige Transaktionen abzulehnen.
Wenn Sie Informationen zu Ihrem Zahlungsprozessor zur Verfügung stellen müssen (zB PayPal Kreditkarte Objekt erfordert das nennen Kartenart ), dann rät von der geringsten verfügbaren Informationen, zB
Diese Implementierung (nur mit den ersten beiden Ziffern) reicht aus, um alle wichtigen (und im Fall von PayPal alle unterstützten) Kartenschemata zu identifizieren. Möglicherweise möchten Sie die Ausnahme sogar ganz überspringen und standardmäßig den beliebtesten Kartentyp verwenden. Lassen Sie sich vom Zahlungsgateway / -prozessor mitteilen, ob als Antwort auf Ihre Anfrage ein Validierungsfehler vorliegt.
Die Realität ist, dass Ihr Zahlungsgateway sich nicht um den von Ihnen bereitgestellten Wert kümmert .
quelle
Die ersten Nummern der Kreditkarte können verwendet werden, um den Anbieter zu approximieren:
quelle
Bei der Kartenbereichserkennung (CRR) besteht ein Nachteil bei Algorithmen, die eine Reihe von regulären Ausdrücken oder anderen fest codierten Bereichen verwenden, darin, dass sich die BINs / IINs meiner Erfahrung nach im Laufe der Zeit ändern. Das Co-Branding von Karten ist eine ständige Komplikation. Unterschiedliche Kartenerwerber / -händler müssen möglicherweise dieselbe Karte unterschiedlich behandeln, abhängig von der geografischen Lage.
Darüber hinaus haben bestehende Modelle in den letzten Jahren mit z. B. UnionPay-Karten in größerem Umlauf keine neuen Bereiche bewältigt, die manchmal mit größeren Bereichen verschachteln, die sie ersetzen.
Die Kenntnis der Geografie, die Ihr System abdecken muss, kann hilfreich sein, da einige Bereiche nur in bestimmten Ländern verwendet werden dürfen. Beispielsweise umfassen die Bereiche 62 einige AAA-Unterbereiche in den USA. Wenn sich Ihre Händlerbasis jedoch außerhalb der USA befindet, können Sie möglicherweise alle 62 als UnionPay behandeln.
Möglicherweise werden Sie auch gebeten, eine Karte je nach Händlerstandort unterschiedlich zu behandeln. ZB bestimmte UK-Karten im Inland als Lastschrift, im Ausland jedoch als Gutschrift zu behandeln.
Es gibt sehr nützliche Regeln, die von einer großen übernehmenden Bank gepflegt werden. ZB https://www.barclaycard.co.uk/business/files/BIN-Rules-EIRE.pdf und https://www.barclaycard.co.uk/business/files/BIN-Rules-UK.pdf . (Gültige Links ab Juni 2017, danke an den Benutzer, der einen Link zu einer aktualisierten Referenz bereitgestellt hat.) Beachten Sie jedoch die Einschränkung, dass diese CRR-Regeln zwar das Universum der Kartenausgabe darstellen können, wie es für die von dieser Entität erworbenen Händler gilt. Es enthält keine zB als CUP / UPI identifizierten Bereiche.
Diese Kommentare gelten für Magnetstreifen- (MagStripe) oder PKE-Szenarien (Pan Key Entry). In der ICC / EMV-Welt ist die Situation wieder anders.
Update: Andere Antworten auf dieser Seite (und auch auf der verlinkten WikiPedia-Seite) haben JCB wie immer 16 lang. In meinem Unternehmen verfügen wir jedoch über ein engagiertes Team von Ingenieuren, die unsere POS-Geräte und -Software für mehrere übernehmende Banken und Regionen zertifizieren. Das neueste Zertifizierungspaket mit Karten, das dieses Team von JCB hat, hatte einen Pass für eine 19-lange PAN.
quelle
Swift 2.1 Version der Antwort von Usman Y. Verwenden Sie eine print-Anweisung, um zu überprüfen, ob der Aufruf durch einen Zeichenfolgenwert erfolgt
quelle
Stripe hat diese fantastische Javascript- Bibliothek zur Erkennung von Kartenschemata bereitgestellt . Lassen Sie mich einige Codefragmente hinzufügen und Ihnen zeigen, wie Sie es verwenden.
Fügen Sie es zunächst Ihrer Webseite als hinzu
Verwenden Sie zweitens die Funktion cardType, um das Kartenschema zu erkennen.
Hier finden Sie die Referenzlinks für weitere Beispiele und Demos.
quelle
In Swift können Sie eine Aufzählung erstellen, um den Kreditkartentyp zu ermitteln.
Rufen Sie die Methode CreditCardType.cardTypeForCreditCardNumber ("# card number") auf, die den Enum-Wert von CreditCardType zurückgibt.
quelle
Meine Lösung mit jQuery:
Wenn 0 zurückgegeben wird, wird der Kreditkartentyp nicht erkannt.
Die Klasse "Kreditkarte" sollte dem Eingabefeld für die Kreditkarte hinzugefügt werden.
quelle
Ich habe ziemlich viel nach Kreditkarten- und Telefonnummernformatierung gesucht. Ich habe viele gute Tipps gefunden, aber nichts entsprach genau meinen Wünschen, also habe ich dieses Stück Code erstellt . Sie verwenden es so:
quelle
quelle
Nur ein kleiner Löffel Fütterung:
quelle
Hier ist ein Beispiel für einige in Python geschriebene boolesche Funktionen, die zurückgegeben werden,
True
wenn die Karte gemäß dem Funktionsnamen erkannt wird.quelle
Aufgrund der oben genannten Fakten möchte ich einen Ausschnitt des JAVA- Codes aufbewahren, um die Kartenmarke zu identifizieren.
Referenz
quelle
Versuchen Sie dies für Kotlin. Fügen Sie Regex hinzu und fügen Sie der when-Anweisung hinzu.
quelle
Die Regeln für reguläre Ausdrücke, die den jeweiligen Kartenanbietern entsprechen :
(4\d{12}(?:\d{3})?)
für VISA.(5[1-5]\d{14})
für MasterCard.(3[47]\d{13})
für AMEX.((?:5020|5038|6304|6579|6761)\d{12}(?:\d\d)?)
für Maestro.(3(?:0[0-5]|[68][0-9])[0-9]{11})
für Diners Club.(6(?:011|5[0-9]{2})[0-9]{12})
zum Entdecken.(35[2-8][89]\d\d\d{10})
für JCB.quelle
Ich verwende https://github.com/bendrucker/creditcards-types/ , um den Kreditkartentyp anhand der Nummer zu ermitteln. Ein Problem, auf das ich gestoßen bin, ist die Ermittlung der Testnummer 6011 1111 1111 1117
Unter https://www.cybersource.com/developers/other_resources/quick_references/test_cc_numbers/ können wir sehen, dass es sich um eine Entdeckungsnummer handelt, da sie mit 6011 beginnt. Aber das Ergebnis, das ich von den Kreditkartentypen erhalte, ist "Maestro". Ich habe die Ausgabe für den Autor geöffnet. Er antwortete mir sehr bald und stellte dieses PDF-Dokument zur Verfügung: https://www.discovernetwork.com/downloads/IPP_VAR_Compliance.pdf Aus dem Dokument geht klar hervor, dass 6011 1111 1111 1117 nicht in den Bereich der Entdeckungskreditkarte fällt.
quelle
Versuchen Sie dies. Für schnell.
Verwenden.
quelle
quelle