PHP验证统一信用代码

<?php
/**
 * 判断是否为统一社会信用代码
 */
function isCompanyCode($str){
    $one = '159Y';//第一位可以出现的字符
    $two = '12391';//第二位可以出现的字符
    $str = strtoupper($str);
    if (!strstr($one, $str['1']) && !strstr($two, $str['2']) && !empty($array[substr($str, 2, 6)])) {
        return false;
    }
    //加权因子数值
    $wi = array(1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28);
    $str_organization = substr($str, 0, 17);
    $num = 0;
    for ($i = 0; $i < 17; $i++) {
        $num += transformation($str_organization[$i]) * $wi[$i];
    }
    switch ($num % 31) {
        case '0':
            $result = 0;
            break;
        default:
            $result = 31 - $num % 31;
            break;
    }
    if (substr($str, -1, 1) == transformation($result, true)) {
        return true;
    } else {
        return false;
    }
}
function transformation($num, $status = false){
    //值转换
    $list = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'J' => 18, 'K' => 19, 'L' => 20, 'M' => 21, 'N' => 22, 'P' => 23, 'Q' => 24, 'R' => 25, 'T' => 26, 'U' => 27, 'W' => 28, 'X' => 29, 'Y' => 30);
    if ($status == true) {
        $list = array_flip($list);
    }
    return $list[$num];
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨四点的_LA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值