php版的三证合一统一社会信用代码制作
程序员文章站
2022-05-03 18:57:29
...
<?php //自动转换为大写进行的检验 //入库前需要所有字母转为大写strtoupper //统一社会信用代码为18位无‘-’ /* 统一社会信用代码是新的全国范围内唯一的、始终不变的法定代码标识。 由18位数字(或大写拉丁字母)组成 第一位是 登记部门管理代码 第二位是 机构类别代码 第三位到第八位是 登记管理机关行政区域码 第九位到第十七位 主体标识码(组织机构代码) 第十八位 校验码 校验码按下列公式计算: C18 = 31 - MOD ( ∑Ci * Wi ,31) (1) MOD 表示求余函数; i 表示代码字符从左到右位置序号; Ci 表示第i位置上的代码字符的值,采用附录A“代码字符集”所列字符; C18 表示校验码; Wi 表示第i位置上的加权因子,其数值如下表: i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Wi 1 3 9 27 19 26 16 17 20 29 25 13 8 24 10 30 28 当MOD函数值为0(即 C18 = 31)时,校验码用数字0表示。 */ header('Content-type:text/html;charset=utf-8'); $lenght = 18;//长度 $text = '0123456789ABCDEFGHJKLMNPQRTUWXY';//可以出现的字符 $notext = 'IOZSV';//不会出现的字符 require './demo.php';//区域码 function check_group($str) { $one = '159Y';//第一位可以出现的字符 $two = '12391';//第二位可以出现的字符 $str = strtoupper($str); if(!strstr($one,$str['0']) || !strstr($two,$str['1']) || !empty($array[substr($str,2,6)])){ echo '错误'; exit; } $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; $i10,'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);//翻转key/value } return $list[$num]; } // $str = '911101083180403603'; // $str = '91350100M000100Y45'; // $str = '911101083180403603'; $str = '52440111MJK9980480'; // $str = '53330000MJ8741013R'; echo check_group($str); // var_dump($str);