本文目錄一覽:
- 1、php登錄系統身份驗證
- 2、PHP正則表達式驗證身份證號格式是否正確
- 3、PHP CRYPT實現密碼驗證原理是什麼?
- 4、如何使用PHP實現身份證是否合法的驗證
- 5、身份證號碼尾號的校驗碼是由什麼公式計算出來的
- 6、php 身份證 正則 檢測是否有效怎麼寫?
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正則表達式驗證身份證號格式是否正確
$pattern = ‘/[0-9]{17}([0-9]|X)/’; [0-9]代表0-9中的一個數字,[0-9]{17}代表重複17個數字
([0-9]|X)代表一個數字或者X字元,()代表子表達式,| 代表或者
PHP CRYPT實現密碼驗證原理是什麼?
例:
!–check_user_crypt.php:使用crypt() 函數驗證用戶—————-
?php
$user_name=$_POST[“user_name”];
require_once(“sys_conf.inc”); //系統配置文件,包含資料庫配置信息
//連接資料庫
$link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_select_db($DBNAME); //選擇資料庫my_chat
//查詢是否存在登錄用戶信息
$str=”select name,password from user where name =’$user_name'”;
$result=mysql_query($str,$link_id); //執行查詢
@$rows=mysql_num_rows($result); //取得查詢結果的記錄筆數
$user_name=$_SESSION[“user_name”];
$password=$_POST[“password”];
$salt = substr($password, 0, 2);
$password_en=crypt($password,$salt); //使用crypt()對用戶密碼進行加密
//對於老用戶
if($rows!=0)
{
list($name,$pwd)=mysql_fetch_row($result);
//如果密碼輸入正確
if($pwd==$password_en)
{
$str=”update user set is_online =1 where name =’$user_name’ and password=’$password_en'”;
$result=mysql_query($str, $link_id);//執行查詢
require(“main.php”); //轉到聊天頁面
}
//密碼輸入錯誤
else
{
require(“relogin.php”);
}
}
//對於新用戶,將其信息寫入資料庫
else
{
$str=”insert into user (name,password,is_online) values(‘$user_ name’,’$password_en’,1)”;
$result=mysql_query($str, $link_id); //執行查詢
require(“main.php”); //轉到聊天頁面
}
//關閉資料庫
mysql_close($link_id);
?
核心部分在於第16、17行使用crypt()函數獲取加密後的密碼,而通過在第25行比較資料庫中的密碼和加密後的密碼是否相等來檢查用戶是否合法。
例如,用戶名為rock,密碼為123456,則加密後的密碼為: 12tir.zIbWQ3c
上面就實現了一個簡單的用戶身份驗證系統。在使用crypt()保護重要的機密信息時,需要注意的是,在預設狀態下使用crypt()並不是最安全的,只能用在對安全性要求較低的系統中。
更多問題到後盾網問題求助專區。
如何使用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;
}
}
}
}
身份證號碼尾號的校驗碼是由什麼公式計算出來的
校驗碼是根據前面十七位數字碼,按照ISO
7064:1983.MOD
11-2校驗碼計算出來的檢驗碼。
具體的公式舉例說明為:
某男性公民身份號碼本體碼為34052419800101001,首先按照公式計算:∑(ai×Wi)(mod
11),其中,i表示號碼字元從右至左包括校驗碼在內的位置序號;
a[i]表示第i位置上的號碼字元值;
W[i]示第i位置上的加權因子,其數值依據公式
W[i]
=
2^(i-1)
mod
(11)計算得出。
則,設R=∑(a[i]×W[i])(mod
11)
=
2,同時R的值【0
1
2
3
4
5
6
7
8
9
10】對應取值為【1
X
9
8
7
6
5
4
3
2】。
計算結果為2的校驗碼為X,所以該人員的公民身份號碼應該為
34052419800101001X。
擴展資料:
身份證號碼的結構和形式:
1、號碼的結構:公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
2、地址碼:表示編碼對象常住戶口所在縣(縣級市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
3、出生日期碼:表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。
4、順序碼:表示在同一地址碼所標識的區域範圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
5、校驗碼:根據前面十七位數字碼,按照ISO
7064:1983.MOD
11-2校驗碼計算出來的檢驗碼。
參考資料來源:百度百科-身份證號碼
參考資料來源:百度百科-身份證校驗位
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 ‘身份證不正確’;
?
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/155396.html