台灣身份證號檢查-自訂函數(Function)

<?php
/*
*正確傳回一個陣列(0-4),不正確傳回空陣列
*0=為零表示證號無誤
*1=出生地
*2=1或2,為性別
*3=證號2-7碼
*4=檢查碼,保留
*/
$id_number=’A123456789′;
function id_check(&$id_number){
$check = preg_match(“/(^[A-Z]{1})([1-2]{1})([0-9]{7})([0-9]{1}$)/”,stripslashes(strtoupper(preg_replace(‘/\s/’,”,$id_number))),$pid_array);
if ($check){
$id_serial =array(1,9,8,7,6,5,4,3,2,1,1);
$area_code=array( ‘A’ => 10,’B’ => 11,’C’ => 12,’D’ => 13, ‘E’ => 14,’F’ =>15,’G’ => 16,’H’ => 17,’I’ => 34,’J’ => 18,’K’ => 19,’L’ => 20,’M’ => 21,’N’ => 22,’O’ => 35,’P’ => 23,’Q’ => 24,’R’ => 25,’S’ => 26,’T’ => 27,’U’ => 28,’V’ => 29,’W’ => 32,’X’ => 30,’Y’ => 31,’Z’ => 33);
$city=array(‘台北市’=>’A’,’台中市’=>’B’,’基隆市’=>’C’,’台南市’=>’D’,’高雄市’=>’E’,’新北市’=>’F’,’宜蘭縣’=>’G’,’桃園市’=>’H’,’嘉義市’=>’I’,’新竹縣’=>’J’,’苗栗縣’=>’K’,’台中縣’=>’L’,’南投縣’=>’M’,’彰化縣’=>’N’,’新竹市’=>’O’,’雲林縣’=>’P’,’嘉義縣’=>’Q’,’台南縣’=>’R’,’高雄縣’=>’S’,’屏東縣’=>’T’,’花蓮縣’=>’U’,’台東縣’=>’V’,’金門縣’=>’W’,’澎湖縣’=>’X’,’陽明山管理局’=>’Y’,’連江縣’=>’Z’);
$conversion=preg_split(‘//’,preg_replace(“/^[A-Z]/”, $area_code[substr($pid_array[0],0,1)] , $pid_array[0]),-1,PREG_SPLIT_NO_EMPTY);
$cal = function ($a,$b){return ($a * $b);};
$result=array_sum(array_map($cal,$id_serial,$conversion))%10;
$pid_array[0]=$result;//將計算結果給陣列,0為正確其它為不正確
$pid_array[1]=array_search(‘A’,$city);//設定出生地名稱至陣列
($pid_array[2]=1)?$pid_array[2]=’男’:$pid_array[2]=’女’;//設定性別至陣列
}
return $pid_array;
}
$pid_array=id_check($id_number);
print_r($pid_array);


Posted in 未分類 by with 4 comments.

Require() Include() 之間的差異

PHP 中的 require() 及incude這二個建構子因為使用方式幾乎相同,讓人不容易分辨如何使用,所以研究了一下四者之間的差異。

一般對於

require()大多解釋為:可以引入在其它的檔案中的PHP程式碼,引入後將該位置中插入引入檔的資料,資料可以是變數、HTML語法、或是任何回傳的結果,若引入檔不在與當前執行的PHP相同路徑,則需要指定完整的路徑。除註解外不論在PHP程式中的任何位置皆會執行即使是在條件為假的判斷式中,若檔案不存在則發生Fatal error:  錯誤,程式並中止執行後續的程式碼.

incude()大多解釋為:可以引入在其它的檔案中的PHP程式碼,引入後將該位置中插入引入檔的資料,資料可以是變數、HTML語法、或是任何回傳的結果,若引入檔不在與當前執行的PHP相同路徑,則需要指定完整的路徑。incude()可以依條件進行載入與否,若檔案不存在則發生Warning: 警告訊息,程式會繼續執行後續的程式碼.

總結:

二者間的差異有二個,

  • 一是若引入檔不存在require()會停止執行後續的程式碼,而include()會繼續執行後續的程式碼。
  • 二是include()可以視條件是否引入,而require()不論任何條件皆會引入。

由於好奇,所以自己做了幾個測試,得到的結果且與書上寫的不同

require()也可視條件決定是否載入,並非一般所說的不論位置為何皆會引入。

require

實際上test2.php及test3.php並未被引入。

所以include()與require()只有當檔案不存在時後續是否繼續執行的差異。


Posted in 未分類 by with 52 comments.