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

信用卡号码的构成

  • 第一位数字是主要产业标识,用于标识该卡所属的产业分类
    • 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;
}

本文来自:http://noyesno.net/page/urn/credit-card

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *