设为首页收藏本站

PHP开源论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 2130|回复: 1

身份证位数转换及验证  关闭 [复制链接]

Rank: 9Rank: 9Rank: 9

发表于 2007-11-2 23:50:47 |显示全部楼层
  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. ?>
复制代码

使用道具 举报

Rank: 1

发表于 2008-8-14 17:49:31 |显示全部楼层

回复 1楼 的帖子

历害,高人呀,你真行呀,你行你一定行

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 人人连接登陆

Archiver|手机版|PHP开源网 ( 豫ICP备08005353号 )   

GMT+8, 2012-5-21 03:06

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部