社会统一信用代码校验方法——php实现

来源:WX部落

使用php实现社会统一信用代码的校验

/**
 * 判断是否为统一社会信用代码
 */
function isCompanyCode($str){
    // 总共18位
    if(strlen($str) != 18){
        return false;
    }
    $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++) {
        $temp = transformation($str_organization[$i]);
        if(!$temp){
            continue;
        }
        $num += $temp* $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] ?? '';
}

声明:

① 凡本网所有原创文章及图片、图表的版权均属WX部落所有,如需转载,需注明“信息来源:WX部落”,并且添加本文地址:http://wxbuluo.com/index/article/33.html

② 凡本网注明“来源:XXX(非WX部落)”的文字及图片内容,均转载自其他媒体,版权归原媒体及作者所有。转载目的在于传递更多的资讯,并不代表本网赞同其观点和对其真实性负责。如有侵权,请联系删除。联系方式:296720094@qq.com

③ 本网站的资源部分内容来源于网络,仅供大家学习与参考,如有侵权,请联系站长296720094@qq.com进行删除处理。

④ 部分项目课程具有时效性,如发布时间较长请搜索相关课程选择发布时间最近的查看。

⑤ 部分具有时效性的项目课程文章,我们会逐步转移到免费类分类开放下载。同时免费分类链接失效不补!

⑥ 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

上一篇:二分查找

下一篇:没有更多文章了