?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位的年份是兩位數(shù),18位的是4位數(shù),留出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);
//計算最后一位
//前十七位乘以系數(shù)[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求余,的余數(shù) 0 - 10
$rod = $sum % 11;
//所得余數(shù)映射到對應(yīng)數(shù)字即可
$arrCh = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$result[17] = $arrCh[$rod];
return implode('',$result);
}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)學(xué)運算技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》及《php正則表達式用法總結(jié)》