信用卡/借记卡号码是数字还是整数?

时间:2011-09-01 11:22:13

标签: numbers integer credit-card

由于数字也可以是小数,这使我认为CC数应该是整数。这是有道理的,因为我不认为任何信用卡从0开始,因为它们都遵循相同的模式:

4444333322221111

所以我猜他们是一个整数,但我不太确定国际卡是什么样的?从0开始做什么?

更新

感谢您的所有回复。它不是存储它们(实际上我只存储最后4个数字)以及更多来进行快速验证检查。无论如何,我只是将它视为验证的整数,即确保它的长度在13-16位之间,并且永远不会是小数。

6 个答案:

答案 0 :(得分:27)

信用卡号码不严格数字。它们是字符串,但是可以展开构成长16位数字的数字,以便使用数字的校验和来验证数字。

你不会对CC号进行任何乘法或除法,所以在我看来它应该是一个字符串。

以下是检查总和信息的链接:

http://www.beachnet.com/~hstiles/cardtype.html

然后如果你想要它......验证信用卡

快速前缀,长度和校验位标准

CARD TYPE      |    Prefix  |   Length  | Check digit algorithm
-----------------------------------------------------------------
MASTERCARD     |    51-55   |   16      |    mod 10
VISA           |    4       |   13,  16 |    mod 10
AMEX           |    34/37   |   15      |    mod 10
Discover       |    6011    |   16      |    mod 10
enRoute        | 2014/2149  |   15      |    any
JCB            |     3      |   16      |    mod 10
JCB            |  2131/1800 |   15      |    mod 10

(该死的桌子永远格式化)

答案 1 :(得分:3)

最好使用一位数的ints数组。通常,在某种类型的校验和中使用各个数字来验证信用卡号。它还会处理CC#实际上从0开始的情况。

例如,

int[] cc = { 4, 3, 2, 1 }
bool Validate(int[] cc)
{
   return ((cc[0] + 2*cc[1] + 6*cc[2]) % 5) == 0;
}

类似的东西,虽然他们使用的方程式更复杂。只需

,这将更加困难(即需要分割和截断)
int cc = 4321;


修改
请记住,信用卡号码中的每个数字都意味着什么。例如,第3和第4位数字可能代表制作卡片的状态,第5位数字可能是发行卡片的特定银行的索引。

答案 2 :(得分:3)

不要使用整数。

根据整数的大小(取决于语言/机器),它们可能太大而无法存储为整数。

信用卡号码的使用也不是整数,因为没有理由对它们进行算术运算。

您通常应将它们视为十进制数字数组,这些数组最容易存储为字符串,但可能需要一个实际的数组,这取决于您的编程语言。

它们还包含编码的银行授权信息,如the wikipedia article on Bank Card Numbers中所述,是 ISO / IEC 7812 号码的特例,实际上可以从零开始(尽管我不知道)认为任何信用卡都这样做。如果您需要此信息,CC编号实际上可能值得它自己的数据类型,并且可能有些银行实现了一个。

答案 3 :(得分:2)

就个人而言,我总是将它们存储为字符串......它是一系列整数,很像电话号码,而不是一个大整数。

答案 4 :(得分:0)

我认为它们是整数,因为它们(几乎可以肯定)不包含任何字母字符,也从不有任何小数位。

答案 5 :(得分:0)

没有信用卡/借记卡号码以零开头(可能是由于这样的讨论)。

所有信用卡/借记卡号都有一个使用Luhn algorithm

计算的校验位

碰巧,4444333322221111通过了Luhn校验位测试。