看到GB/T 11714 全国组织机构代码编制规则,里面有一个计算公式
由于年久,数学什么的早忘记完了,只会基本的加减乘除了,所以那个公式也太复杂,搜了下,发现有人用PHP实现了,因此记录下
原文地址:http://www.splaybow.com/post/php-check-zuzhijigoudaima.html
/* 组织机构代码是每一个机关、社会团体、企事业单位在全国范围内唯一的、始终不变的法定代码标识。 最新使用的组织机构代码在1997年颁布实施,由8位数字(或大写拉丁字母)本体代码和1位数字(或大写拉丁字母)校验码组成。本体代码采用系列(即分区段)顺序编码方法。校验码按下列公式计算: 8 C9 = 11 - MOD ( ∑Ci * Wi ,11) … (2) i=1 其中:MOD —— 表示求余函数; i —— 表示代码字符从左到右位置序号; Ci —— 表示第i位置上的代码字符的值,采用附录A“代码字符集”所列字符; C9 —— 表示校验码; Wi —— 表示第i位置上的加权因子,其数值如下表: i 1 2 3 4 5 6 7 8 Wi 3 7 9 10 5 8 4 2 当MOD函数值为1(即 C9 = 10)时,校验码用字母X表示。 */ <?php //自动转换为大写进行的检验 //入库前需要所有字母转为大写strtoupper //机构代码为9位无‘-’ function check_group($str) { $str = strtoupper($str); $wi = array(3, 7, 9, 10, 5, 8, 4, 2); $total = 0; $a = ord("A"); //65 $z = ord("Z"); //90 for ($i = 0; $i < 8; $i++) { $stri = substr($str, $i, 1); //(Mid(str_in, i, 1)) $num = 0; $tempstri = ord($stri); if ($tempstri >= $a & $tempstri <= $z) { $num = ($tempstri - 55) * $wi[$i]; } else if ($tempstri >= 48 & $tempstri <= 57) { $value = $tempstri - 48; $num = $value * $wi[$i]; } $total = $total + $num; } $checki = 11 - (intval($total) % 11); if ($checki == 10) { $c9 = "X"; } else if ($checki == 11) { $c9 = "0"; } else { $c9 = $checki; } if (ord(substr($str, -1)) == ord($c9) && strlen($str)==9) { return true; } else { return false; } } //$str = 'L18322123'; $str = '743719761'; var_dump(check_group($str)); $arr = array('692454192', '053582091', 'L6005760X', 'L60057722', '074951247', '066448668', 'L0691990X', '670260856', '069216715', '701268691', '06487003X', '664198400'); foreach ($arr as $v) { var_dump(check_group($v)); } ?>
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《PHP版本的组织机构代码验证函数》
发表评论