Wie kann ich mit Kreditkarte zahlen, die Leerzeichen enthalten?
Einige ausgefallene websites zeigen, wird ein Fehler-dialog, wenn festgestellt wird, dass ein untrainierter shopper ist in einem Kredit - /Debitkartennummer, wie er gedruckt ist, die auf der Karte mit Leerzeichen. Ist es möglich in gewisser Weise schreiben Sie ein Java-web-app, mit der diese zahlen mit Leerzeichen, als ob Sie richtig waren?
Ich kann einfach nicht aufhören, mich von dem Hinweis darauf, dass es: "Ein Ingenieur in der Java-SE-security für die Sonne." wer ist gefragt. Bitte sagen Sie mir, du machst Witze, oder es ist irgendein Scherz... oder, es ist 4 Uhr und du bist einfach nur schreiben-Fragen in Ihrem Schlaf...
Ich nehme an die Frage gedacht, eine Diskussion zu beginnen oder express die gleichen ärger mit diesen Seiten habe ich, oder vielleicht etwas, was der Fragesteller wird gebeten und möchte die Menschen darauf hinweisen, die nächste Zeit.
NÖ. Die Räume können nicht ohne weiteres aus der Eingabe entfernt. Sie können nicht neu anordnen, die Benutzer-Eingaben-das ist einfach zu viel zu tun für den Benutzer. Wenn eine person nicht verwenden können, die software, es ist das problem des Anwenders. Sie müssen lernen, software zu benutzen, durch manuelles entfernen von Leerzeichen aus einem langen, unverständlichen Zeichenfolge von Zufallszahlen.
Sicher muss es einige Rahmenbedingungen, die dies für Sie tun? Hmmm mal sehen... wie wäre es mit JCCNESPX (Java Kreditkartennummer Bewertung mit Fadenscheinigen XML-Plugin)?
Ich stellte die Frage, weil schlechte websites Nerven mich. Dies ist ein sehr typisches Beispiel für einen usability-bug, der nervt die Hölle aus mir, oft. Es ist keine ausreichende Entschuldigung für es. Ich will jemand, der arbeitet, auf websites, um irgendeine Art von Ahnung über diese Art von user experience cockup. (FWIW, ich arbeite direkt gegenüber SE. Es ist ein web-server, aber das ist nur ein winziger Teil. Bisher habe ich schon einige web-Sachen. Vor vielen Jahren arbeitete ich an der Entwicklung eines Web-Content-Management-System (Mediasurface).)
Ich nehme an die Frage gedacht, eine Diskussion zu beginnen oder express die gleichen ärger mit diesen Seiten habe ich, oder vielleicht etwas, was der Fragesteller wird gebeten und möchte die Menschen darauf hinweisen, die nächste Zeit.
NÖ. Die Räume können nicht ohne weiteres aus der Eingabe entfernt. Sie können nicht neu anordnen, die Benutzer-Eingaben-das ist einfach zu viel zu tun für den Benutzer. Wenn eine person nicht verwenden können, die software, es ist das problem des Anwenders. Sie müssen lernen, software zu benutzen, durch manuelles entfernen von Leerzeichen aus einem langen, unverständlichen Zeichenfolge von Zufallszahlen.
Sicher muss es einige Rahmenbedingungen, die dies für Sie tun? Hmmm mal sehen... wie wäre es mit JCCNESPX (Java Kreditkartennummer Bewertung mit Fadenscheinigen XML-Plugin)?
Ich stellte die Frage, weil schlechte websites Nerven mich. Dies ist ein sehr typisches Beispiel für einen usability-bug, der nervt die Hölle aus mir, oft. Es ist keine ausreichende Entschuldigung für es. Ich will jemand, der arbeitet, auf websites, um irgendeine Art von Ahnung über diese Art von user experience cockup. (FWIW, ich arbeite direkt gegenüber SE. Es ist ein web-server, aber das ist nur ein winziger Teil. Bisher habe ich schon einige web-Sachen. Vor vielen Jahren arbeitete ich an der Entwicklung eines Web-Content-Management-System (Mediasurface).)
InformationsquelleAutor Tom Hawtin - tackline | 2009-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Ansicht ist, dass jede Web-app, lehnt eine Kreditkartennummer mit Leerzeichen ist nicht Ihre Arbeit tun. Wenn Sie eine Kreditkarte erhalten Anzahl, es ist einfach genug zu tun:
entfernen Leerzeichen und Bindestriche (manche benutzen diese auch). Überprüfen Sie das Ergebnis. Werden Sie sich einfach ärgern Ihre Benutzer, wenn Sie Sie zu zwingen, zu entfernen, Räumen Sie könnte genauso gut tun.
Als für wie zu überprüfen, nun, das hängt von einer Menge Dinge wie die Web-framework du verwendest und was die Validierung von Optionen, die Sie gewählt haben. Struts 1 zum Beispiel könnte oder nicht, Apache Commons Validator in der Erwägung, dass Spring MVC wird (wahrscheinlich) nutzen Spring, validation und so weiter. Also ich kann dir nicht sagen, wie genau zu überprüfen, aber ich kann Ihnen sagen, was zu überprüfen.
Die erste Sache ist, dass eine CC-Nummer mit Leerzeichen sollten nicht abgelehnt werden. Die meisten Menschen finden:
viel einfacher zu Lesen als:
was ist wirklich wichtig, wenn der Benutzer nicht oder falsch eintippt eine Ziffer und Bedürfnisse zu finden, warum seine oder Ihre Kreditkartennummer, die die Prüfung nicht bestanden. Die replaceAll() an der Spitze von diesem post behandelt diese situation.
Die zweite Sache ist, dass Sie bei der Anzeige der Kreditkartennummer (auch wenn einige Ziffern ersetzt, mit X aus Gründen der Sicherheit) in der richtigen Art und Weise. Ich schlage vor, Sie Lesen Sie durch Anatomie der Kreditkarte Zahlen.
Diese Seite gibt Ihnen die Regeln für die Anzahl der Ziffern und die gültige Präfixe. Eine robuste Web-Anwendung implementieren, die diese , so dass Sie erkennen können, ob eine Kreditkartennummer ungültig ist, bevor Sie versuchen, und verwenden Sie es. Es kann bis zu 30 Sekunden (oder vielleicht mehr) zu übermitteln Kreditkartendaten an ein payment gateway, so dass Sie sollten es nicht tun, bis Sie sicher sind, wie Sie sein können, dass die Zahlung akzeptiert wird. Etwas anderes zu tun ist, um eine wirklich schlechte user experience. Es gibt jede chance, die Benutzer aufgeben, wenn es nicht 1-2 mal anstatt zu warten.
Als für die Anzeige, das hängt von der Anzahl der Ziffern:
Nummer der Kreditkarte sollte überprüft werden, nach der Prüfsummen-Algorithmus erwähnt, der in der Seite vor der Einreichung für die Verarbeitung als Teil eines standard-Validierungs-routine. Die Seite hat ein Java-Implementierung der routine.
Jeder website akzeptiert Zahlung mit Kreditkarte werden sollte, zu tun alle der oben genannten, als ein absolute minimum oder du bist einfach wegwerfen business als Prozentsatz der Benutzer frustriert.
Also die kurze version ist zwei einfache Regeln:
Vielleicht wäre es besser, einen regex verwenden, die entfernt alle Zeichen, die nicht eine Zahl. Aber ja, ich bin damit einverstanden, dass jede website, die nicht etwas tun, dieses basic ist nicht seine Arbeit richtig tun!
Sacre, ich bin nicht einverstanden. Etwas, das nicht eine Nummer ungültig ist, und sollten als solche behandelt werden. Andere als Leerzeichen oder Striche, meine ich. Buchstaben sind Zeichen, die der Benutzer vertippt.
"Darüber hinaus sollten Sie auch überprüfen, die CVC -" <-- die Prüfziffer und CVC sind sehr verschiedene Dinge. Das design der CVC ist so, dass Sie nicht überprüfen kann es, ohne dass es an die ausstellende bank. Die Prüfziffer, jedoch hat ein bekannter Algorithmus dahinter.
Tatsächlich, die meisten der website, die nicht zulassen, Räume sind vom Benutzer zu korrigieren, da Sie das CC-Feld Breite bis zu 16, so dass Sie können nicht geben Sie eine MC oder Visa CC# mit Leerzeichen.
InformationsquelleAutor cletus
Ich würde so weit gehen, entfernen Sie alle nicht-numerischen Zeichen, die dann die überprüfung, dass die Länge gültig ist, bevor die Ausführung des Benutzer-Eingabe-mittels Echtzeit-Validierung wie Luhn-Algorithmus.
Streifen Sie heraus alle nicht-Ziffern von
String input
.was ist das Fall? Und wenn es ein Fall ist, sollte die software ablehnen Charaktere geradezu, statt dem Benutzer zu ermöglichen, geben Sie Ihnen nur einen Klaps auf Ihre hand höher.
Hi Bryan, der Fall ist, dass die Buchstaben nicht als "Abstandshalter" in der gleichen Weise wie vielleicht " ", "-", "/", ".", etc. Ich persönlich würde interpretieren die alphabetischen Zeichen, die in eine Kreditkarten-Nummer-Eingabe-Feld "der Nutzer ist die Eingabe von Müll". Aber ich nehme an, es ist dabei kein Schaden wirklich, wie Sie & andere gesagt haben.
Denken Sie daran, das Ziel der software ist es, zu dienen dem Benutzer, nicht die andere Weise herum.
Ich bin damit einverstanden, dass ein Fall könnte gemacht werden. Es ist sehr unwahrscheinlich, dass ein Benutzer die Mittel zu geben 1234a5678b9012c3456. Die meisten Menschen denken würden, dass der Müll, auch wenn es vielleicht eine gültige CC-Nummer eingebettet. Entfernen Sie alle nicht-Numerik ermöglicht Dinge wie 1234/5678 |9012|3456 zu passieren, obwohl, wo nur die Zulassung bestimmter Trennzeichen wie Leerzeichen und Bindestrich scheitern würden diesem Beispiel. Ich möchte lieber, dass irgend etwas mit den richtigen Ziffern in der richtigen Reihenfolge, als die den Benutzer daran erinnern, wie ich wie es eingegeben wurde.
InformationsquelleAutor Bill the Lizard
Websites, die Kraft, die Sie eingeben, mit Kreditkarte zahlen (und ähnliche Sachen) in einem bestimmten format - ernsthaft ärgern mich.
Diese Leute belästigen Ihre Kunden ganz einfach, weil Sie (die Entwickler) sind faul. Es gibt keinen Grund, Dinge zu akzeptieren wie Kreditkarten-Nummern, Telefonnummern, etc. in welcher Form auch immer Sie erbracht werden. Die einzige Einschränkung ist, was ERFORDERLICH ist, um zu verstehen, wie der Wert interpretiert werden.
Sollten Sie nicht egal, ob ich enter 5555-4444-3333-2222 oder 5555444433332222, nur Streifen die Bindestriche raus, wenn du Sie nicht magst - gleich mit Räumen. Und mit dem Handy zahlen, es sei denn, Sie gehen, um die auto-wählen Sie die Nummer, die Sie wahrscheinlich nicht, auch egal, welches format Ihr in so ärgern nicht Ihre Benutzer, wenn Sie zu haben.
InformationsquelleAutor kenj0418
Leider Nein. Java kann einfach nicht mit diesen Anforderungen, da es so viel Aufwand, den die Emulation der Java Virtual Machine auf x86-chips, so dass kein Raum für nützliche Konstrukte wie Perl reguläre Ausdrücke, die es tun können folgendermassen:
Java machte einen Versuch, auf das hinzufügen von regulären Ausdrücken ein paar Jahre zurück, aber Sie lief nur auf den PowerPC-chips, die nicht mehr verwendet werden. Das problem war, dass alle regulären Ausdrücke werden musste enthaltenen Zeichenfolgen anstelle der ersten Klasse Sprache konstruieren, und damit die Verdoppelung backslashes erforderlich war, aber wie jeder weiß Schrägstriche bedeuten etwas anderes, auf das primäre Betriebssystem für die x86-Architektur.
Mein Rat ist, zu aktualisieren, zu Perl. Schema ist auch bekannt, dass Sie in der Lage, diese situation zu behandeln sowie einen enormen Vorteil gegenüber Ihrer Konkurrenten, aber Schema läuft nur auf LISP-Maschinen.
lustig genug, zu mir zu bekommen, aber nur, weil ich einen guten Kaffee jetzt 🙂
Lustig genug für mich zu stornieren jemand downvote aus Perversität.
das Schema Kommentar am Ende kippte Sie über den Rand für mich 🙂
mehr braucht Erlang
InformationsquelleAutor skiphoppy
Leider nicht, der Grund, warum stattdessen diese tollen web-sites müssen zu zeigen, wird ein Fehler-dialog für das ungeübte shopper: zu zwingen, die shopper zu re-geben Sie Ihre Nummer in das format, dass die Maschine bevorzugt.
Warum, wenn nur ein Maschine tun könnten, "Datenverarbeitung", so dass die Maschine sich ändern könnte, das Daten-format! Oder wenn nur, wenn es keine solche Sache wie eine "ungeübte" shopper! Leider!!!!
Ich war als tongue-in-cheek ... Scherz gedacht ... ich war in der Tat liegen ... aber ich bin mir sicher, dass die OP, die baten das so genannte 'Frage', würde wissen, dass.
InformationsquelleAutor
Ihre Frage scheint seltsam, aber ich würde meinen, es sollte so einfach wie das ausführen der eingegebenen Kreditkartennummern von Benutzern über eine validation-Funktion, die zunächst entfernen Sie alle Leerzeichen.
Ist dies Recht trivial in jeder modernen Sprache, mit oder ohne Verwendung von regex.
InformationsquelleAutor user67143
Einfach.
Um dieses problem zu lösen, erstellen wir einen Zwischenraum, die nur die zahlen 0 bis 9. Wir kreieren für Sie ein neues enum-Element für dieses endliche Menge. Wir nennen dies unsere finger Platz, da es komischerweise enthält die gleiche Anzahl von Mitgliedern, wie wir tun die Finger.
Wir haben dann schreiben Sie zwei Funktionen.
Wie reduzieren wir den Eingang Platz, um die finger-Raum, wir werfen Sie einfach alle Zeichen, die nicht in der finger-Raum. Umstellung von finger-Raum, output-Raum ist sogar noch einfacher. Wir finden Sie einfach die gleiche Anzahl in der Ausgabe Platz.
Der trick ist, für diese zu arbeiten, mit allen Zeichensätzen. Ich habe nicht herausgefunden, wie um festzustellen, ob ein bestimmtes Zeichen ein Mitglied in meine finger legen. Vielleicht sollte ich es veröffentlichen als eine Frage.
whoa whoa whoa, Sie sind Schritte überspringen! Nur weil der input-Raum und Ausgang Raum sind die gleichen, es bedeutet nicht, sollten Sie Verknüpfung der Prozess. Sie wollen alles definiert werden, damit die clear-verfügbar-finger-Raum.
InformationsquelleAutor Pyrolistical
Tom,
Das problem ist technisch gelöst, lassen Sie uns darüber reden theoretisch.
Es gibt zwei Denkschulen hier. Ich glaube nicht, es ist eine akzeptable Antwort zu sagen, "wenn der Benutzer nicht herausfinden, ist es Ihr problem."
Meiner Meinung nach #2 ist der Weg zu gehen, können Sie reguläre Ausdrücke verwenden (wie oben beschrieben) , ziehen alle Leerzeichen, Sonderzeichen, etc. aus der cc# Feld und halten Sie die Benutzer aus, die zu geben Sie Ihre Informationen erneut ein.
Entweder, wie Sie sollten, informieren Sie die Benutzer die richtige Eingabe-Formular (also xxxx-xx-xxxx)
als Faustregel gilt, dass ich eher zu schätzen Websites, die mehr elegant über den Umgang mit Benutzereingaben.
Weitere tips zu regulären Ausdrücken überprüfen Sie heraus reguläre Ausdrücke . info
Glück,
-Robert
InformationsquelleAutor Robert Greiner
Gibt es eine Reihe von Optionen, aber die logischste zu sein scheint, nur eine simple string-ersetzen, um zu ersetzen Sie alle Leerzeichen durch einen geschlossenen Charakter also ". Dies reduziert die Kreditkarte string, nur eine lange Reihe von zahlen..dann einfach Prozess entfernt
InformationsquelleAutor AAA
Werbung auf dieser website... Für nur $49.95 können Sie eine neue Tastatur-kompatibel mit diesem online-Shop. Klicken Sie hier, um die neue Tastatur im Warenkorb und checkout. Beim Check-out geben Sie bitte Ihre Kreditkarten-Nummer in das vorgesehene Feld eingeben. Bitte geben Sie nicht die Leerzeichen zwischen den zahlen, da unser store nicht wissen, wie man mit Leerzeichen zwischen den zahlen.
InformationsquelleAutor Jeffrey Hines
Ich nehme an, das ist eine echte Frage, obwohl es sieht aus wie eine Art troll oder Witz.
Sollten Sie als Modell für die Schnittstelle, so dass der Anwender instinktiv führt der Eingang in einer kontrollierten Art und Weise. Einfach gesagt, Fragen Sie Sie für die Art von Karte, die den ersten und dann auf die Eingabe-format der Eingabe auf der Karte entsprechen. Zum Beispiel, vorausgesetzt, eine 16-stellige Karten wie Visa oder Mastercard, display 4 Eingabe-Felder getrennt durch Leerzeichen oder Bindestriche, input limit zu jeweils 4 Zeichen und automatisch zum nächsten Feld in der Serie nach der Benutzer-Typen der vierten Stelle.
Es sollte so Aussehen wie die folgenden auf der Seite:
oder
Ja, Sie brauchen, schlau zu sein, verschieben des Fokus, wenn Sie eine dumme Umsetzung, nur verschiebt sich der Fokus auf key-Eingabe, wo Sie die Länge der Zeichenfolge ist gleich 4 dann wird es ein echter PITA um eine Nummer zu löschen und ersetzen Sie es.
Es ist sicherlich leicht zu produzieren eine Benutzeroberfläche, die Ursachen Unbeholfenheit in einige unvorhergesehene Situationen. Besonders in einer "feindlichen Umgebung".
InformationsquelleAutor Orclev
nur eine person zu haben scheint, erwähnt der Luhn oder mod 10-Algorithmus
http://en.wikipedia.org/wiki/Luhn_algorithm
InformationsquelleAutor malcolmm
Sicher. Komprimieren Sie die Räume. Wahrscheinlich gibt es eine Unmenge Möglichkeiten, es zu tun; ich würde geneigt sein, um die Verwendung von String.split (), um Sie zu brechen, bis auf die Leerzeichen, dann concatente die vier Saiten ergeben. Oder StringBuffer verwenden.indexOf() und .delteCharAt().
...oder wie Cletus sagte, verwenden replaceAll().
InformationsquelleAutor Charlie Martin
könnten Sie die javascript-Validierung mithilfe der
onkeypress
Ereignis, um zu überprüfen ob das Letzte Zeichen ist gültig und wenn nicht, entfernen Sie es einfach und vielleicht sogar flash eine Meldung, dass ein ungültiges Zeichen eingegeben wurde. Auf diese Weise ungültige zahlen nie eingegeben. Es könnte auch automatisch in den spacer Zeichen (Leerzeichen oder -) in das format, das Sie möchten.InformationsquelleAutor zonkflut
Schrieb ich diese paar Perl-Funktionen in einem Geschäft, wo nur Visa durfte (...bei Visa, eigentlich...) zurück im Jahr 1998.
Zulassen plausibel Kreditkartennummern durch. Es wäre nicht schwer, zu verallgemeinern, zu behandeln, Mastercard, Discover, American Express zu.
Rant
Ich tun nicht wie web-sites, die darauf bestehen, mir die Eingabe von Daten in Ihrem internen format. Verdammt - speichern Sie die Zahl als eine große ganze Zahl, und senden Sie es als eine Reine Ziffernfolge; das ist in Ordnung für Computer. Aber lassen Sie mich geben Sie erkennbare menschliche lesbare Formate - auch re-präsentieren die Daten in der human-lesbaren format. Es ist weit, weit, weit zu viel Faulheit in web-Seiten, die mit Kreditkarte zahlen.
InformationsquelleAutor Jonathan Leffler
Wenn du meinst javascript, könnten Sie gehen mit "weiter zum nächsten input" - Methode:
Hier die HTML-Ausgabe:
Und hier das JS:
Natürlich, werden Sie wollen, fügen Sie eine Funktion, die prüft, für nicht-zahlen und eine Funktion für die Aufnahme der vier Felder und fasst Sie in einem string übergeben zurück zu der form. Es ist auch nicht eine schlechte Idee, eine js-Bibliothek wie Jquery, um sicherzustellen, dass die Ereignisse auf die gleiche Weise behandelt und vereinfachen die Traversierung durch die Eingänge, so können Sie Attribute wie "name", ohne jede Verwirrung.
Aber in der Regel, wenn die Menschen sehen Sie 4 Felder, es macht es einfacher, in Ihrer Zahl, und für diejenigen Besucher, die sich denken "ach Muttern, ich muss mit meiner Maus für jede Zahl" sind Sie (oder zumindest ich) freuen uns, dass die Seite ist klug genug zu wissen, um mit dem nächsten Feld fortfahren.
Bitte nicht - dies ist eine schreckliche Idee. Websites, die versuchen, 'nützlich' zu sein und bewegen sich zum nächsten Feld, wenn Sie denken, dass Sie Sie abgeschlossen haben Eingabe in einem Feld wie diese zwei Dinge tun. Einen machen Sie Menschen, die Tabulatortaste zum nächsten Feld, weil Sie wissen, dass Sie fertig sind, überspringen Sie die Felder und wieder zurück. Und zwei, Sie machen es verdammt nahe unmöglich zu korrigieren, ein Feld, wenn Sie einen Tippfehler gemacht.
InformationsquelleAutor Anthony
Lösung 1: Wie wäre es einfach mal in 4 Textfeldern können, dass die 4-stelligen Nummern. Wie die Lizenzschlüssel für die software eingegeben werden. Sie auslösen können, die Boxen zu wechseln in die nächste Zeile bei der Eingabe ein Leerzeichen oder das Tabulatorzeichen.
Lösung 2: Verwenden von regulären Ausdrücken, wie schon in einem der Kommentare oben beschrieben. Problem ist, Sie werden anfällig für injection-Angriffe, wenn Ihr eine web-Anwendung.
InformationsquelleAutor Ritesh M Nayak
JavaTM ist ideal für server-side-Programmierung, während javascript ist möglicherweise nützlich, auf der client-Seite; zum Beispiel bei der Validierung.
Eine gültige Kreditkarte Zahl schwankt in der Länge zwischen 12 (z.B. Maestro) und 19 (z.B. Solo, Switch). Die client-side javascript herausfinden konnte, ob die Kartennummer gültig ist (nur Ziffern (mit Bindestrichen oder Leerzeichen), passt die Emittentin Behörde, Checksumme ok ist, ...) und führen Sie eine 1:1-Zuordnung von einem 'human-readable' (z.B.
), um eine interne Repräsentation, z.B.
Einmal die Daten der Kreditkarten-Validierung bestanden hat, die Validierung während Eingabe können die Werte werden transparent, Umgerechnet in die interne form auf senden.
Beispiel einer einfachen javascript-Funktion, die einige Prüfungen, die Sache im Netz gefunden, z.B. hier http://www.braemoor.co.uk/software/creditcard.shtml.
So viel für eine Beschreibung einer Antwort.
InformationsquelleAutor miku