?php
function CardId15To18($card){
$len = strlen($card);
if($len == 18){
return $card;
}else if($len != 15){
return false;
}
$result = array();
for($i=0;$i$len;$i++){
if($i=5){
$result[$i] = intval($card[$i]);
}else{
//15位的年份是兩位數,18位的是4位數,留出2位
$result[$i+2] = intval($card[$i]);
}
}
//留出的2位,補充為年份,年份最后兩位小于17,年份為20XX,否則為19XX
if(intval(substr($card,6,2)) = 17){
$result[6] = 2;
$result[7] = 0;
}else{
$result[6] = 1;
$result[7] = 9;
}
ksort($result);
//計算最后一位
//前十七位乘以系數[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],
$arrInt = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$sum = 0;
for($i=0;$i17;$i++){
$sum += $result[$i] * $arrInt[$i];
}
//對11求余,的余數 0 - 10
$rod = $sum % 11;
//所得余數映射到對應數字即可
$arrCh = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$result[17] = $arrCh[$rod];
return implode('',$result);
}
更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP數學運算技巧總結》、《php字符串(string)用法總結》、《PHP數組(Array)操作技巧大全》、《PHP數據結構與算法教程》、《php程序設計算法總結》及《php正則表達式用法總結》