PHP学习笔记之身份证验证程序

来源:互联网 发布:旋转轮胎修改数据 编辑:程序博客网 时间:2024/05/01 06:40
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title><?php  function TrueData($year, $mon, $day)  {if ($year > 9999 || $year < 1900)  return false;if ($mon == 1 || $mon == 3 || $mon == 5 || $mon == 7 || $mon == 8 || $mon == 10 || $mon == 12){  if ($day < 1 || $day > 31)return false;  elsereturn true;}else if ($mon == 4 || $mon == 6 || $mon == 9 || $mon == 11){  if ($day < 1 || $day > 30)return false;  elsereturn true;}else if ($mon == 2){  if (($year%4 == 0 && $year%100 != 0) || $year%400 == 0)  {if ($day < 1 || $day > 29)  return false;else  return true;  }  else  {if ($day < 1 || $day > 28)  return false;else  return true;  }}else  return false;  }    function Search($str)//查询初始发证地  {$numOfLines = 0;$myfile = array();$myfile = file("IDdata.txt");//将文件内容存储到数组中foreach ($myfile as $value) //遍历数组,查询包含初始发证地代码的字符串元素{  $pos = strpos($value, $str);  if ($pos != false)  {  return substr($value, 0, $pos-3);  }}return "火星";  }    function CheckCode($IdNum)//判断18位身份证的校验码是否正确  { //分别对应身份证前17位数字的加权因子 $weight = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //校验码串 $strCode = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $sum = 0;for ($i=0; $i<17; $i++) //按顺序循环处理前17位{   //提取前17位的其中一位,并将变量类型转为实数   $num = (int) $IdNum[$i];      //把从身份证号码中提取的一位数字和加权因子相乘,并累加   $sum += $num * $weight[$i];} //计算序号 $number = $sum % 11; return ($strCode[$number] == $IdNum[17]);  }  function IsRightId($IdNum)  {if (strlen($IdNum) == 18)    {     if (is_numeric($IdNum) || (is_numeric(substr($IdNum, 0, 17)) && substr($IdNum, 17, 1) == "X"))  {if (CheckCode($IdNum))//判断18位身份证的校验码是否正确  return true;    else  return false;  }  else  {return false;  }    }    else if (strlen($IdNum) == 15 && is_numeric($IdNum))    {  return true;    }    else    {       return false;}  }  ?></head><body>  <h3><strong>输入身份证号码就可以显示性别,出生日期和初始化发证地 </strong></h3>  <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">       <strong>身份证号码</strong>       <input type="text" name="myID">    <input type="submit" value="确认" />  </form>      <?php$IdNum = $_POST['myID'];  if (IsRightId($IdNum)){  if (strlen($IdNum) == 18)  {$year = substr($IdNum, 6, 4);$month = substr($IdNum, 10, 2);$day = substr($IdNum, 12, 2);$sex = substr($IdNum, 16, 1);  }  else  {$year = substr($IdNum, 6, 2) + 19;$month = substr($IdNum, 8, 2);$day = substr($IdNum, 10, 2);$sex = substr($IdNum, 14, 1);  }  if (substr($month, 0, 1) == '0')  $month = substr($month, 1);  if (substr($day, 0, 1) == '0')$day = substr($day, 1);    if (!TrueData($year, $month, $day))  {echo("错误的身份证号!请重新输入!");  }    if ($sex % 2 == 1)  $sex = "男";  else  $sex = "女";    $addressNumber = substr($IdNum, 0, 6);    echo("性别:" . $sex . "<br />");  echo("出生年月:" . $year . "年" . $month . "月" . $day . "日" . " <br />");  echo("初始发证地:" . Search(substr($IdNum, 0, 6)) . "<br />");}else if ($IdNum != NULL){echo("错误的身份证号!请重新输入!");}  ?>    </body></html>

0 0
原创粉丝点击