用php编写一个 统一信用代码 验证方法
时间: 2024-05-15 22:16:46 浏览: 5
以下是用PHP编写的统一信用代码验证方法:
```php
function isUnifiedCreditCodeValid($code) {
if(strlen($code) != 18) { // 统一信用代码必须为18位
return false;
}
$weights = array(1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28); //每一位的权重
$checkCode = substr($code, 17, 1); // 最后一位为校验码
$sum = 0;
for($i = 0; $i < 17; $i++) {
$digit = substr($code, $i, 1);
$weight = $weights[$i];
if(is_numeric($digit)) {
$sum += $digit * $weight;
} else {
return false; // 统一信用代码必须由数字或大写字母组成
}
}
$modulus = $sum % 31;
$checkCodeMapping = "0123456789ABCDEFGHJKLMNPQRTUWXY"; // 校验码字符映射表
if($checkCode != $checkCodeMapping[$modulus]) {
return false;
}
return true;
}
```
使用示例:
```php
$code = "91350100M000100Y43";
if(isUnifiedCreditCodeValid($code)) {
echo "统一信用代码 $code 有效";
} else {
echo "统一信用代码 $code 无效";
}
```
输出结果:
```
统一信用代码 91350100M000100Y43 有效
```
说明:
该方法首先检查统一信用代码是否为18位,如果不是则返回false。然后根据国家标准 GB 32100-2015 的规定,将前17位分别乘以对应的权重,然后对乘积求和并取模,得到的结果应该和最后一位校验码相等,否则返回false。最后,如果统一信用代码由数字和大写字母组成且校验码正确,则返回true,否则返回false。