信用卡号码的构成
- 第一位数字是主要产业标识,用于标识该卡所属的产业分类
- 1 和 2 表示航空业
- 3 表示旅游和娱乐
- 4 和 5 表示银行和金融
- 6 表示商业和银行
- 7 表示石油
- 8 表示通信
- 9 表示国家分配
- 前 6 位数字(包含第一位数字)是发卡机构代码IIN(Issuer Identification Number)
- 第 7 位至倒数第二位数字是用户的个人帐号。常见的是9位数字,也可以多达12位数字
- 最后一位是校验数字,用来校验卡号
信用卡发卡机构可以在 http://noyesno.net/query/bank 查询。
信用卡号码的校验
信用卡号码的校验用的是Luhn算法:
- 从卡号最后一位数字开始,逆向将奇数位数字相加求和
- 从卡号最后一位数字开始,逆向将偶数位数字,先乘以2,如果乘积为两位数,则减去9,再求和
- 将奇数位总和加上偶数位总和,结果应该可以被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