信用卡号码规则和校验规则

风行水上 @ 2012-03-20 17:55:01
标签:

信用卡号码的构成

  • 第一位数字是主要产业标识,用于标识该卡所属的产业分类
    • 1 和 2 表示航空业
    • 3 表示旅游和娱乐
    • 4 和 5 表示银行和金融
    • 6 表示商业和银行
    • 7 表示石油
    • 8 表示通信
    • 9 表示国家分配
  • 前 6 位数字(包含第一位数字)是发卡机构代码IIN(Issuer Identification Number)
  • 第 7 位至倒数第二位数字是用户的个人帐号。常见的是9位数字,也可以多达12位数字
  • 最后一位是校验数字,用来校验卡号

信用卡发卡机构可以在 http://noyesno.net/query/bank 查询。

信用卡号码的校验

信用卡号码的校验用的是Luhn算法:

  1. 从卡号最后一位数字开始,逆向将奇数位数字相加求和
  2. 从卡号最后一位数字开始,逆向将偶数位数字,先乘以2,如果乘积为两位数,则减去9,再求和
  3. 将奇数位总和加上偶数位总和,结果应该可以被10整除

下面是PHP代码的信用卡号码有效性检查:

function verify($id){
  $id = preg_replace('/[^\d]/','',$id);
  $n=strlen($id);
  $sum = 0;
  for($i=$n-1; $i>=0; $i-=2) $sum += $id[$i];
  for($i=$n-2; $i>=0; $i-=2) $sum += $id[$i]<5?($id[$i]*2):($id[$i]*2-9);

  return $n>=13 && $sum%10==0;
}
标签:

分享到:
comments powered by Disqus

20/23ms