身份證校驗原理和php實現,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-hk/n/155396.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-17 02:39
下一篇 2024-11-17 02:39

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • 瘦臉算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉算法 Python 實現的原理和方法,包括該算法的意義、流程、代碼實現、優化等內容。 一、算法意義 隨着科技的發展,瘦臉算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 神經網絡BP算法原理

    本文將從多個方面對神經網絡BP算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP算法簡介 BP算法是一種常用的神經網絡訓練算法,其全稱為反向傳播算法。BP算法的基本思想是通過正…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • GloVe詞向量:從原理到應用

    本文將從多個方面對GloVe詞向量進行詳細的闡述,包括其原理、優缺點、應用以及代碼實現。如果你對詞向量感興趣,那麼這篇文章將會是一次很好的學習體驗。 一、原理 GloVe(Glob…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • 編譯原理語法分析思維導圖

    本文將從以下幾個方面詳細闡述編譯原理語法分析思維導圖: 一、語法分析介紹 1.1 語法分析的定義 語法分析是編譯器中將輸入的字符流轉換成抽象語法樹的一個過程。該過程的目的是確保輸入…

    編程 2025-04-27

發表回復

登錄後才能評論