2015-02-02

居留證號檢驗 PHP version

網路有JAVA、Javascript version的,沒有PHP version,只好自已刻一個...跟檢驗身份證號的方法意思是差不多的。



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*******
居留證號檢驗 PHP version by Duckfly 2014.04.07
param1 = 居留證號
param2 = 是否區分大小寫 (預設false)
********/
function isRCNum($RCNum='', $caseSensitive=false){
$RCNum = trim($RCNum);
//first step
$pattern = ($caseSensitive)?'/^[A-Z]{1}[A-D]{1}[0-9]{8}$/':'/^[A-Z]{1}[A-D]{1}[0-9]{8}$/i';
if(preg_match($pattern, $RCNum) == 0) return false;
//second step
$RCArray = str_split(strtoupper($RCNum));
$area_str="ABCDEFGHJKLMNPQRSTUVXYWZIO";
//num1 ~ num2
$ary12 = str_split(strval(strpos($area_str, $RCArray[0])+10));
//num3
$ary3 = array(strpos($area_str, $RCArray[1]) % 10);
//chechArray (+num4 ~ num11)
$chechArray = array_merge($ary12, $ary3, array_slice($RCArray, 2));
//parseInt
$chechArray = array_map('intval', $chechArray);
//sum
if(count($chechArray) !== 11) return false;
$sum = $chechArray[0]+$chechArray[10];
for($i=1;$i<=9;$i++){
$sum += $chechArray[$i]*(10-$i);
}
if(($sum % 10) !== 0) return false;
return true;
}

沒有留言:

張貼留言