9
votes

Un numéro de carte de crédit / débit est-il numérique ou un entier?

Étant donné qu'un nombre peut également être une décimale, cela me fait penser qu'un numéro CC devrait être un entier. Cela aurait un sens comme je ne pense pas que les cartes de crédit commencent avec 0 et, comme ils suivent tous le même type de motif:

44443333222221111

Donc, je suppose qu'ils sont un entier mais je ne suis pas trop sûr de quoi ressemblent les cartes internationales? Faire tout début avec 0?

mise à jour

Merci pour toutes vos réponses. Il est moins de les stocker (en fait, je ne fermerais que les 4 derniers chiffres) et plus pour faire un chèque de validation rapide. Quoi qu'il en soit, je vous le traiterais comme un entier pour la validation, c'est-à-dire de s'assurer qu'il est compris entre 13 et 16 chiffres de longueur et toujours jamais une décimale.


1 commentaires

Si vous avez affaire à CC NUMÉRO, pourquoi ne pas regarder l'API que vous êtes interface pour les traiter et utiliser ce format de données?


6 Réponses :


0
votes

J'imagine qu'ils sont des entiers tels qu'ils (presque certainement) ne contiennent aucun caractère alphabétique et ne présentent jamais de décimales.


0 commentaires

3
votes

Mieux vaut utiliser un tableau de Ints code>. Souvent, les chiffres individuels sont utilisés dans un type de somme de contrôle pour valider le numéro de carte de crédit. Cela prendrait également soin de l'affaire qu'un numéro CC commence par 0.

Par exemple, P>

int cc = 4321;


4 commentaires

Pouvez-vous donner un exemple pour où cela serait nécessaire?


@Thilo: tous types de validation de la somme de contrôle. Google vous en donne beaucoup.


Tout cela serait possible avec un entier ou une corde aussi.


@Thilo: C'est vrai. Cependant, un entier ne serait pas en mesure de stocker des cadres supérieurs et nécessiterait de diviser par 10 ^ n pour obtenir le chiffre nième . Les chaînes sont essentiellement des matrices de caractères et constitueraient une option viable, mais elle aurait également besoin de convertir Char_to_int à tout moment, vous souhaitez effectuer une opération mathématique (comme une somme de contrôle).



36
votes

Les numéros de carte de crédit sont pas strictement numéros . Ils sont chaînes , mais les chiffres qui constituent le long numéro de 16 chiffres peuvent être explosés afin de valider le numéro en utilisant la somme de contrôle du numéro.

Vous n'allez pas faire de multiplication ou de division sur le numéro CC, il devrait donc s'agir d'une chaîne à mon avis.

Préfixe rapide, longueur et contrôle des critères de chiffre xxx


3 commentaires

7 ans plus tard, la table est toujours impressionnante.


Cette réponse est ancienne, mais je tiens à souligner que si vous stockez un numéro de carte sous forme de Varchar et une décimale dans SQL Server, il existe une énorme différence de stockage. Un varchar (16) prendra 16 octets de stockage vs. 9 octets pour une décimale (16, 0). Évidemment, pour un petit ensemble de données, ce n'est pas une grosse affaire, mais pour 10 millions de millions de numéros de carte, la différence de stockage est significative.


Neuf ans plus tard. Voulez-vous voir si une carte convient à une gamme. Stocker comme un numéro permet plus ou moins que la comparaison



2
votes

Personnellement, je les stocke toujours comme une chaîne ... c'est une série d'entiers, un peu comme un numéro de téléphone, pas un grand entier lui-même.


4 commentaires

Une série d'entiers ne serait-elle pas plutôt exprimée par un éventail d'entiers? (Ou éventuellement comme une gamme de caractères, mais pas dans le sens d'une chaîne ASCII)


Techniquement, oui, mais cela me semble plutôt semblable à la surkill ... Dépend si vous essayez d'obtenir une performance de 100% de votre système ou de le rendre plus convivial.


Vous devez souvent travailler avec les valeurs entières réelles lors de la validation des numéros CC. Je trouve donc plus pratique de les stocker comme des entiers tout de suite au lieu de convertir les chiffres en Int avant chaque opération. Mais c'est plus une question de goût.


@ Tommy5Dollar: L'application la plus développée serait d'avoir une classe CreditCard avec des interfaces permettant d'accéder aux numéros, plutôt que de nécessiter chaque fonction client d'analyser une chaîne.



0
votes

aucun numéro de carte de crédit / débit commence par un zéro (probablement en raison de discussions comme celle-ci).

Tous les numéros de carte de crédit / débit ont un chiffre de contrôle calculé à l'aide du Algorithme Luhn < / p>

Comme il se trouve, 44443333322221111 transmet le test de chiffre de contrôle Luhn.


1 commentaires

Je ne trouve plus la source, mais j'ai regardé cette question et j'ai constaté que certains numéros de carte de crédit peuvent commencer par un 0.



4
votes

N'utilisez pas d'entier pour cela.

Selon la taille de vos entiers (langue / machine dépendante), ils peuvent être trop volumineux pour stocker comme entiers.

L'utilisation de numéros de carte de crédit n'est pas non plus comme des entiers, car il n'y a aucune raison de faire de l'arithmétique avec eux.

Vous devez généralement les considérer comme des matrices de chiffres décimaux, ce qui pourrait être plus facilement stocké en tant que chaînes, mais pourrait mériter un tableau réel, en fonction de votre langue de programmation.

Ils contiennent également des informations sur l'autorité bancaire codées comme décrit dans L'article Wikipedia sur les numéros de carte bancaire , et sont un cas particulier de ISO / IEC 7812 , qui peut en fait commencer par zéro (bien que je ne pense pas que les cartes de crédit soient). Si vous avez besoin de ces informations, un numéro CC pourrait effectivement mériter son propre type de données, et certaines banques implémentent une.


0 commentaires