信用卡号码可以包含前导零吗?

时间:2011-08-23 17:09:38

标签: database-design credit-card

我经常在varchar(16)存储信用卡号码。这是有效的,但每个数字需要17个字节。

存储并不是什么大不了的事,但我希望能够提高存储要求和表搜索时间。

如果我可以使用decimal(16) unsigned,我可以将存储需求减少到7或8个字节,并且仍然保持可读性以及大部分兼容性。

这会剥夺前导零。我可以依赖所有以非零数字开头的信用卡号吗?

4 个答案:

答案 0 :(得分:10)

信用卡号码(如电话号码和邮政编码)不是数字,不应存储在数字数据类型中。它们本质上是字符串数据。不打算用于数学计算的数字(除了用作id的自动分配整数除外)是字符串数据,它们将用作字符串数据,它们将被查询为字符串数据。

答案 1 :(得分:5)

根据Wikipedia,第一个数字确实可以是0:

  

信用卡号码的第一位是主要行业标识符(MII),它代表发行信用卡的实体类别。不同的MII数字代表以下发行人类别:

     
      
  • 0 - ISO / TC 68和其他未来的行业任务
  •   
  •   

所以不,我认为你不想使用省略前导零的存储。

答案 2 :(得分:4)

他们可以。信用卡的第一个数字是它的主要行业标识符,它告诉您哪种实体发行了该卡。使用全部十位数,包括零。前六位数整体形成发行者标识符,我不认为它们限制为0,因为Discover以6011开头。

Credit Card Numbering

答案 3 :(得分:3)

只有ISO/TC 68 credit cards以前导零开头(另请参阅ISO/IEC 7812的Wikipedia条目)。所以它们似乎非常罕见,但可能存在