本文目录一览:
- 1、php的怎么用身份证号来做帐号判断代码
- 2、php登录系统身份验证
- 3、使用PHP代码编写一个在网页中强迫用户进行身份认证的程序语句段
- 4、如何使用PHP实现身份证是否合法的验证
- 5、php 身份证 正则 检测是否有效怎么写?
php的怎么用身份证号来做帐号判断代码
写了几个身份证方面的函数,个人感觉挺有用的,特别是在网络问卷调查时,对个人信息里的身份证进行验证很有用,但是应者寥寥,还是收在自己的blog里算了。
<?php
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
if (strlen($idcard_base) != 17){ return false; }
// 加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
// 校验码对应值
$verify_number_list = array(’1’, ’0’, ’X’, ’9’, ’8’, ’7’, ’6’, ’5’, ’4’, ’3’, ’2’);
$checksum = 0;
for ($i = 0; $i < strlen($idcard_base); $i++){
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
}
$mod = $checksum % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard){
if (strlen($idcard) != 15){
return false;
}else{
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if (array_search(substr($idcard, 12, 3), array(’996’, ’997’, ’998’, ’999’)) !== false){
$idcard = substr($idcard, 0, 6) . ’18’. substr($idcard, 6, 9);
}else{
$idcard = substr($idcard, 0, 6) . ’19’. substr($idcard, 6, 9);
}
}
$idcard = $idcard . idcard_verify_number($idcard);
return $idcard;
}
// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
if (strlen($idcard) != 18){ return false; }
$idcard_base = substr($idcard, 0, 17);
if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){
return false;
}else{
return true;
}
}
?>
其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码
一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数,这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查。
php登录系统身份验证
login.html
form id="form1" name="form1" method="post" action="checklogin.php"
table width="400"
tr
th width="27%" scope="row"用户名/th
td width="73%"input name="user_name" type="text" id="user_name" //td
/tr
tr
th scope="row"密码/th
tdinput name="user_pwd" type="password" id="user_pwd" //td
/tr
tr
th scope="row"请填写答案 /th
tdinput name="yzm" type="text" id="yzm" size="5" /
123/td
/tr
tr
td colspan="2" scope="row"div align="center"
input type="submit" name="Submit" value=" 登录 " /
/div/td
/tr
/table
/form
checklogin.php
?php
session_start();
require_once("../include/class/Mysql.class.php");
require_once("../include/class/FuncAdmin.class.php");
require_once("../include/class/Users.class.php");
$db = new Mysql();
$db-getConnection(1);
$db-select_db();
$db-query("set names gb2312");
$f = new FuncAdmin();
if(!empty($_POST['Submit'])){
//判断登录
$user_name = $_POST['user_name'];
$user_pwd = $_POST['user_pwd'];
$yzm = $_POST['yzm'];
//加强验证
//此处很重要但没写出呢cxmcook
if(empty($user_name) || empty($user_pwd)){
$f-alert_back("用户名与密码不能为空!");
}
$user = new Users();
$sql = $user-get_select_sql(" where user_name='".$user_name."' and user_pwd='".$user_pwd."' ");
$rs = $db-query($sql);
$row = $db-fetch_array($rs);
//var_dump($row);
//die("hr");
$rownum = $db-num_rows($rs);
//die('=========='.$rownum);
if( $rownum 0 ){
//$row = $db-fetch_array($rs);
$_SESSION['admin'] = 'admin';
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_name'] = $row['user_name'];
$_SESSION['user_realname'] = $row['user_realname'];
$_SESSION['user_last_logintime'] = $row['user_last_logintime'];
$_SESSION['user_last_loginIp'] = $row['user_last_loginIp'];
$_SESSION['user_loginnum'] = $row['user_loginnum'];
//header("Location:index.php");
echo "script
alert('登录成功!".$_SESSION['user_realname']."');
location='index.php';
/script";
}else{
$f-admin_tip("用户名或密码错误!");
}
}
?
使用PHP代码编写一个在网页中强迫用户进行身份认证的程序语句段
if ($_SERVER['PHP_AUTH_USER']!='user' || $_SERVER['PHP_AUTH_PW']!='123456') {
header('WWW-Authenticate: Basic realm="MyFramework Realm"');
header('HTTP/1.0 401 Unauthorized');
echo "You must enter a valid login ID and password to access this resource.\n";
exit;
}
上面的代码段作用就是强制用户输入认证,用户名跟密码可以自己设置
如何使用PHP实现身份证是否合法的验证
function is_idcard( $id )
{
$id = strtoupper($id);
$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
$arr_split = array();
if(!preg_match($regx, $id))
{
return FALSE;
}
if(15==strlen($id)) //检查15位
{
$regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
@preg_match($regx, $id, $arr_split);
//检查生日日期是否正确
$dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
if(!strtotime($dtm_birth))
{
return FALSE;
} else {
return TRUE;
}
}
else //检查18位
{
$regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
@preg_match($regx, $id, $arr_split);
$dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
if(!strtotime($dtm_birth)) //检查生日日期是否正确
{
return FALSE;
}
else
{
//检验18位身份证的校验码是否正确。
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
$arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sign = 0;
for ( $i = 0; $i 17; $i++ )
{
$b = (int) $id{$i};
$w = $arr_int[$i];
$sign += $b * $w;
}
$n = $sign % 11;
$val_num = $arr_ch[$n];
if ($val_num != substr($id,17, 1))
{
return FALSE;
} //phpfensi.com
else
{
return TRUE;
}
}
}
}
php 身份证 正则 检测是否有效怎么写?
你的正则表达式的规则错了。。当然不能执行啦
这是规则。如果你只是拿来主义,就无视吧。
代码长篇大论,是对你负责;说真的,百度没几个愿意自己写那么多字的人。我第二程序是自己写的,试验过了。可以自动把身份证升级到18位,然后验证。
正则表达式其实是来自数学的概念,后来加入了编程语言。正则表达式验证身份证简单,但是有缺点,你的要求是:验证出身年月日,很可惜,正则没办法验证的太完善。也就是说只要符合规则就是正确(比如19940939之类的出生年月。。。),所以写程序就是为了完善它。话说多了= =不采纳也没办法。我自认为我比楼上的好多了。
?php
$s15="/^[0-9]{15}$/";
//15位正则表达式
$s18="/^[0-9]{6}[1]{1}[9]{1}[0-9]{2}[0-1]{1}[0-9]{1}[0-3]{1}[0-9]{1}[0-9]{3}[0-9X]{1}$/";
//18位正则表达式
$sid="18位或者15位身份证";
if(preg_match($s15,$sid) or preg_match($s18,$sid))
//如果满足这两个条件的其中一个,输出echo
echo 'ok';
else
echo 'no';
?
简单不好用,我花了一个小时写了一个15位转18位然后自动验证的函数:
?php
function check($sid)
{
if(strlen($sid)== 15)
//如果是15身份证,进入自动转换程序,把15位升级到18位
{
$wi=array('7','9','10','5','8','4','2','1','6','3','7','9','10','5','8','4','2','1');
$sid=substr_replace($sid,19,6,0);
$count=array();
for($i=0;$i18;++$i)
{
@$count[$i]=$sid[$i]*$wi[$i];
}
$sum=array_sum($count)%11;
$zuihou=array('1','0','X','9','8','7','6','5','4','3','2');
$sid=substr_replace($sid,$zuihou[$sum],17,0);
//这个sid是18位的。= = 不信你拿自己的身份证(15位)放过来试验,肯定没错。
}
$wi18=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
$sum2=array();
for($j=0;$j17;$j++)
{
$sum2[$j]=$sid[$j]*$wi18[$j];
}
$sum2=array_sum($sum2)%11;
$yz=array('1','0','X','9','8','7','6','5','4','3','2');
if($yz[$sum2] == $sid[17])
//如果最后一位和验证号一样,则返回真
return true;
else
return false;
}
$sid="18位或者15位身份证";
if(check($sid))
echo '是正确的身份证';
else
echo '身份证不正确';
?