Discuz教程网

身份证位数转换及验证

[复制链接]
authicon dly 发表于 2011-1-7 12:41:21 | 显示全部楼层 |阅读模式
  1. <?php
  2. /**
  3. *身份证15位转18位
  4. *$str 15位号码
  5. */
  6. function id_card_15to18($str){
  7.    if (!preg_match("/^[1-9]d{14}$/", $str)) return false;
  8.    $str = substr($str, 0, 6) . \'19\' . substr($str, 6);
  9.    $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  10.    $ai = array(\'1\', \'0\', \'X\', \'9\', \'8\', \'7\', \'6\', \'5\', \'4\', \'3\', \'2\');
  11.    for ($i = 0;$i < 17;$i++) $sigma += ((int) $str{$i}) * $wi[$i];
  12.    return $str.$ai[($sigma % 11)];
  13. }

  14. /**
  15. *身份证校验函数
  16. *$str 15位或18位号码
  17. */
  18. function is_id_card($str){
  19.    if (preg_match("/^[1-9]d{14}(d{2}[0-9X])?$/", $str)) {
  20.        if (strlen($str) == 18) {
  21.            $s = substr($str, 0, 17);
  22.            $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  23.            $ai = array(\'1\', \'0\', \'X\', \'9\', \'8\', \'7\', \'6\', \'5\', \'4\', \'3\', \'2\');
  24.            for ($i = 0;$i < 17;$i++) $sigma += ((int) $s{$i}) * $wi[$i];
  25.            if ($ai[($sigma % 11)] == $str{17}) return true;
  26.            else return false;
  27.        }
  28.        return true;
  29.    }
  30.    return false;
  31. }
  32. ?>
复制代码




上一篇:PHP图片压缩的类
下一篇:PHP静态类
authicon fantuanzi 发表于 2011-6-17 20:59:47 | 显示全部楼层
支持!好东西,拿走了!
authicon 咫尺天 发表于 2011-6-25 15:00:11 | 显示全部楼层
看帖必回
authicon TRACYFLYING 发表于 2011-6-25 16:59:57 | 显示全部楼层
楼主威武
authicon D_hong 发表于 2011-6-26 11:59:48 | 显示全部楼层
强人,佩服死了。
authicon rin421 发表于 2011-6-27 20:59:54 | 显示全部楼层
好东西,要下来看看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 08:41

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表