Comment puis-je utiliser des numéros de carte de crédit contenant des espaces?
Un peu de fantaisie sites web afficher une boîte de dialogue d'erreur lorsqu'il est détecté qu'un débutant client a saisi une carte de crédit/carte de débit numéro est imprimé sur leur carte avec des espaces. Est-il possible, d'une certaine façon d'écrire une Java web app qui gère ces chiffres avec des espaces comme s'ils étaient corrects?
source d'informationauteur Tom Hawtin - tackline
Vous devez vous connecter pour publier un commentaire.
Mon point de vue est que toute application Web qui rejette un numéro de carte de crédit avec des espaces n'est pas de faire son travail. Lorsque vous recevez un numéro de carte de crédit, il est assez facile à faire:
pour supprimer les espaces et les tirets (certains utilisent ces trop). Puis valider le résultat. Vous n'aurez tout simplement ennuyer vos utilisateurs, si vous forcer à supprimer les espaces, vous pourriez juste comme facilement le faire.
Comme pour comment à valider, en fait ça dépend de beaucoup de choses, tels que le framework Web que vous utilisez et ce que la validation des options que vous avez choisi. Struts 1 par exemple, pourrait ou ne pourrait pas l'utilisation d'Apache Commons Validator alors que Spring MVC sera (probablement) l'utilisation de Ressort de validation et ainsi de suite. Donc je ne peux pas vous dire exactement comment valider mais je peux vous dire ce pour valider.
La première chose, c'est qu'un numéro de CC avec des espaces pas être rejeté. La plupart des gens vont trouver:
beaucoup plus facile à lire que:
qui est vraiment important si l'utilisateur est absent ou mistypes un chiffre et a besoin de trouver pourquoi son numéro de carte de crédit échec de la validation. Le replaceAll() en haut de ce post répond à cette situation.
La deuxième chose, c'est que vous affichez le numéro de carte de crédit (même si certains chiffres sont remplacés par des X pour des raisons de sécurité) dans le bon sens. Je vous suggère de lire à travers Anatomie de Numéros de Carte de Crédit.
Cette page vous donne les règles pour le nombre de chiffres et de la validité de préfixes. Une application Web robuste permettra de mettre en œuvre ces de sorte que vous pouvez dire si un numéro de carte de crédit n'est pas valide avant d'essayer de l'utiliser. Il peut prendre jusqu'à 30 secondes (voire plus) de soumettre des détails de carte de crédit à une passerelle de paiement de sorte que vous ne devriez pas le faire jusqu'à ce que vous êtes sûr que vous pouvez être ce que le paiement sera accepté. Faire autrement est de fournir une très mauvaise expérience utilisateur. Il ya toutes les chances que l'utilisateur va abandonner si elle ne parvient pas 1 à 2 fois plutôt que d'attendre.
Que pour l'affichage, qui dépend du nombre de chiffres:
Le numéro de carte de crédit doit être vérifiée selon l'algorithme de somme de contrôle mentionnés à la page avant de le soumettre pour le traitement dans le cadre d'une norme de validation de la routine. Cette page est une implémentation Java de cette routine.
Chaque site web qui accepte le paiement par carte de crédit devrait être fait tous les ci-dessus comme un minimum absolu ou vous êtes tout simplement de jeter les affaires comme un pourcentage de vos utilisateurs frustrés.
Donc la version courte est deux règles simples:
Je voudrais aller jusqu'à la suppression de tous les caractères non numériques puis de vérifier que la longueur est valide avant l'exécution de la saisie de l'utilisateur au moyen d'une véritable validation comme L'algorithme de Luhn.
supprime tous les chiffres de
String input
.Sites web qui vous forcent à entrer les numéros de carte de crédit (et assimilés) dans un format spécifique - à sérieusement m'agacer.
Ces gens sont de pénaliser leurs clients tout simplement parce qu'ils (les développeurs) sont paresseux. Il n'y a aucune raison de ne pas accepter les choses comme les numéros de carte de crédit, numéros de téléphone, etc quel que soit le format dans lequel elles sont prévues. La seule limitation est ce qui est NÉCESSAIRE pour comprendre comment interpréter la valeur.
Vous ne devriez pas vous préoccuper de savoir si je entrer 5555-4444-3333-2222 ou 5555444433332222, simplement enlever les tirets si vous n'aimez pas eux - mêmes avec des espaces. Et avec les numéros de téléphone, sauf si vous allez à être auto-composer le numéro, vous n'aurez probablement pas même attention à ce format de son afin de ne pas ennuyer vos utilisateurs, sauf si vous avez.
Malheureusement, non. Java il ne peut pas gérer ces exigences, car il ya tellement de choses que les coûts de l'émulation de la Machine Virtuelle de Java sur x86 puces, ne laissant pas de place pour des constructions comme les expressions régulières de Perl, qui peut le faire ainsi:
Java fait une tentative à l'ajout d'expressions régulières quelques années en arrière, mais ils ne s'exécutaient sur PowerPC, qui ne sont plus utilisés. Le problème est que toutes les expressions régulières devaient être contenus comme des Chaînes de caractères au lieu d'être un premier de classe construction du langage, et doublant ainsi le nombre de barres obliques inverses, mais comme chacun le sait, les barres obliques inverses signifie quelque chose de différent sur le système d'exploitation principal pour l'architecture x86.
Mon conseil est de mettre à jour de Perl. Régime est également connu pour être en mesure de gérer cette situation ainsi que de donner un énorme avantage sur vos concurrents, mais le Système ne fonctionne que sur les machines LISP.
Malheureusement pas, pourquoi au lieu de ceux de fantaisie sites web doivent afficher une boîte de dialogue d'erreur pour l'amateur shopper: à force de le shopper à ré-entrer leur numéro, dans le format de la machine préfère.
Pourquoi, si seulement un machine pourrait faire "traitement des données", de sorte que la machine elle-même pourrait changer le format de données! Ou, si seulement si il n'y avait pas une telle chose comme un "non formés" shopper! Hélas!
Votre question semble étrange mais je pense qu'il devrait être aussi facile que de courir les numéros de carte de crédit saisies par les utilisateurs à travers une fonction de validation qui serait d'abord de supprimer tous les espaces blancs.
C'est plutôt trivial dans aucune langue moderne, avec ou sans l'aide de regex.
Facile.
Pour résoudre ce problème, nous avons créer un espace intermédiaire contenant uniquement des chiffres de 0 à 9. Nous pouvons créer une nouvelle enum pour cet ensemble fini. Nous allons appeler cela du doigt et de l'espace, car bizarrement il contient le même nombre de membres que nous n'doigts.
Nous avons ensuite écrire deux fonctions.
À la réduction de l'espace d'entrée au doigt de l'espace, nous venons de déposer n'importe quel caractère qui n'est pas trouvé dans le doigt de l'espace. La conversion du doigt l'espace à l'espace de sortie est encore plus facile. Nous retrouvons le même nombre dans l'espace de sortie.
Le truc, c'est pour que cela fonctionne avec tous les jeux de caractères. Je n'ai pas compris comment faire pour déterminer si un certain caractère correspond à un membre de mon doigt ensemble. Je devrais peut-être poster une question.
Tom,
Le problème est résolu techniquement, parlons-en théorie.
Il y a ici deux écoles de pensée. Je ne pense pas que c'est une réponse acceptable à dire "si l'utilisateur ne peut pas le comprendre c'est leur problème."
À mon avis, no 2 est le chemin à parcourir, vous pouvez utiliser des expressions régulières (comme indiqué ci-dessus) pour tirer tous les espaces, caractères spéciaux, etc. de la cc# de terrain et de garder à l'utilisateur d'avoir à saisir leurs informations à nouveau.
De toute façon, vous devez en informer l'utilisateur de la bonne forme d'entrée (c'est à dire xxxx-xx-xx-xxxx)
en règle générale, j'ai tendance à apprécier les sites qui sont plus élégants sur la façon de gérer la saisie de l'utilisateur.
Pour plus de conseils sur les expressions régulières vérifier régulièrement-expressions . info
Bonne chance,
-Robert
Il y a un certain nombre d'options, mais le plus logique semble être de faire une simple chaîne de caractères à remplacer à remplacer tous les espaces avec un caractère fermé c'est à dire ". Cela permettra de réduire la carte de crédit de la chaîne à une seule longue chaîne de chiffres..puis il suffit de processus,
Annonce sur ce site... Pour seulement $49.95 vous pouvez avoir un nouveau clavier spécial compatible avec cette boutique en ligne. Cliquez sur ici pour ajouter le nouveau clavier dans votre panier et commander. Lors de la vérification, veuillez entrer votre numéro de carte de crédit dans la zone désignée. S'il vous plaît ne pas entrer dans les espaces entre les chiffres de notre magasin de ne pas savoir comment traiter avec des espaces entre les chiffres.
Je vais supposer c'est une vraie question, même si elle ressemble à une sorte de troll ou d'une blague.
Vous devriez modèle de votre interface de sorte que l'utilisateur instinctivement effectue la saisie dans une manière contrôlée. Il suffit de mettre, pour leur demander la carte d'abord, et ensuite sur le formulaire d'entrée format de l'entrée de la carte. Par exemple, en supposant une carte à 16 chiffres, comme Visa ou Mastercard, affichage 4 boîtes d'entrée séparés par des espaces ou des tirets qui limitent l'entrée à 4 caractères et automatiquement passer à la zone suivante dans la série une fois que l'utilisateur tape le quatrième chiffre.
Il devrait ressembler à quelque chose comme ce qui suit sur la page:
ou
une seule personne semble avoir mentionné le Luhn ou mod 10 algorithme
http://en.wikipedia.org/wiki/Luhn_algorithm
Sûr. Compresser les espaces. Il y a probablement un tas de façons de le faire; je serais tenté d'utiliser des chaînes de caractères.split() sur les espaces, puis concatente les quatre cordes qui en résulte. Ou de l'utilisation de StringBuffer.indexOf() et .delteCharAt().
...ou que Cletus dit, l'utilisation des replaceAll().
vous pouvez utiliser javascript de validation à l'aide de la
onkeypress
événement pour vérifier si le dernier caractère est valide, et si non seulement à enlever, et peut-être même flash un message disant qu'un caractère non valide a été entré. De cette façon numéros non valides ne sont jamais entrés. Il pourrait également entrer automatiquement une entretoise de caractères (espace ou -) dans le format que vous voulez.J'ai écrit cette paire de Perl fonctions dans un magasin où seules les cartes Visa a été autorisé (...à Visa, en fait...) en 1998.
Le permettre plausible numéros de carte de crédit par le biais de. Il ne serait pas difficile de généraliser à gérer Mastercard, Discover, American Express.
Diatribe
Je ne pas comme les sites web, qui insistent sur moi entrer des données dans leur format interne. Zut - store, le nombre, comme un grand nombre entier et l'envoyer comme un pur chaîne de chiffres; c'est bien pour les ordinateurs. Mais laissez-moi entrer reconnaissable de l'homme lisible formats - même re-présenter les données dans le format lisible. Il y a beaucoup, beaucoup, beaucoup trop de paresse dans les sites web qui gèrent les numéros de carte de crédit.
Si tu veux javascript, vous pourriez aller avec la "avance à la prochaine entrée de la" méthode:
Voici le code HTML:
Et voici le JS:
Bien sûr, vous voulez ajouter une fonction qui vérifie pour les non-numéros et une fonction pour prendre les quatre champs et de les fusionner en une seule chaîne à transmettre à la forme. Ce n'est pas une mauvaise idée d'utiliser une bibliothèque js comme Jquery pour s'assurer que les événements sont traités de la même manière et de simplifier la traversée à travers les entrées de sorte que vous pouvez utiliser les attributs "nom", sans aucune confusion.
Mais en général, si les gens voient 4 champs, il est plus facile de taper dans leur numéro, et pour ceux qui pensent "ah noix de, je dois utiliser ma souris, pour chaque numéro," ils sont (ou au moins, je suis heureux que la page est assez intelligent pour savoir pour passer au champ suivant.
Solution 1: il suffit de mettre dans 4 zones de texte qui peut prendre de 4 chiffres. Comme la façon dont les clés de licence pour le logiciel sont entrés. Vous pouvez déclencher les boîtes de changer pour le prochain dans la ligne lors de la saisie d'un caractère espace ou le caractère de tabulation.
Solution 2: Utiliser des expressions régulières comme mentionné dans l'un des commentaires que décrit ci-dessus. Problème, vous serez sensibles aux attaques par injection si ses une application web.
JavaTM est idéal pour la programmation côté serveur, tandis que le javascript est peut-être utile sur le client; par exemple, lors de la validation.
Un numéro de carte de crédit dans la longueur varie entre 12 (par exemple, Maestro) et 19 (par exemple, Solo, Switch). Le javascript côté client pourrait savoir si le numéro de la carte est valide (uniquement des chiffres (avec des tirets ou des espaces), les costumes de l'émetteur de l'autorité, de la somme de contrôle est ok, ...) et d'effectuer un mappage 1:1 à partir d'un lisible (par exemple
) à une représentation interne, par exemple
Une fois que les informations de carte de crédit de validation a passé la validation pendant d'entrée, la valeur peut être convertie en la forme interne sur-soumettre.
Un exemple de la plaine de la fonction javascript qui effectue certaines vérifications sur ce point peut être trouvé sur le net, par exemple ici http://www.braemoor.co.uk/software/creditcard.shtml.
Tellement pour une description de la réponse.