【PHP】社会统一信用代码正则验证
以下是一个PHP函数,用于验证中国的统一社会信用代码。统一社会信用代码是由18位的数字和大写英文字母组成,其构成为:
- 第1位,登记管理部门代码(数字或大写英文字母);
- 第2位,机构类别代码(数字或大写英文字母);
- 第3位-8位,登记管理机关行政区划码(数字);
- 第9位-17位,主体标识码(组织机构代码)(数字或大写英文字母);
- 第18位,校验码(数字或大写英文字母)。
function isValidCreditCode($code) {
$pattern = "/^[0-9A-Z]{18}$/";
if (!preg_match($pattern, $code)) {
return false; // 如果不符合正则表达式,返回false
}
$weights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]; // 权重
$codes = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ'; // 校验码字符集
$sum = 0;
for ($i = 0; $i < 17; $i++) {
$sum += $weights[$i] * $codes->indexOf($code[$i]); // 计算校验码
}
$checkCode = $codes[$sum % 31]; // 计算得到的校验码
return $checkCode == $code[17]; // 与第18位比对
}
// 使用示例
$creditCode = "91230100710699388B";
if (isValidCreditCode($creditCode)) {
echo "统一社会信用代码有效";
} else {
echo "统一社会信用代码无效";
}
这段代码首先定义了一个正则表达式来验证信用代码的结构,然后定义了一个权重数组,并通过这个权重数组和信用代码的前17位计算出一个校验码,最后将计算出的校验码与信用代码的最后一位进行比对以验证整个信用代码的有效性。
评论已关闭