由于数字也可以是小数,这使我认为CC数应该是整数。这是有道理的,因为我不认为任何信用卡从0开始,因为它们都遵循相同的模式:
4444333322221111
所以我猜他们是一个整数,但我不太确定国际卡是什么样的?从0开始做什么?
更新
感谢您的所有回复。它不是存储它们(实际上我只存储最后4个数字)以及更多来进行快速验证检查。无论如何,我只是将它视为验证的整数,即确保它的长度在13-16位之间,并且永远不会是小数。
答案 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)