php汽车vin校验

php汽车vin 17位校验,汽车唯一标识校验。

VIN是英文Vehicle Identification Number的缩写。 
SAE标准规定:VIN码由17位字符组成,所以俗称十七位码。它包含了车辆的生产厂家、年代、车型、车身型式及代码、发动机代码及组装地点等信息。
正确解读VIN码,对于我们正确地识别车型,以致进行正确地诊断和维修都是十分重要的。
 VIN码详解 
1~3位(WMI):制造厂、品牌和类型;
第2位:汽车制造商代码 第3位:汽车类型代码 
4~8位(VDS):车辆特征 
第9位:校验位 
第10位:车型年款 
第11位:装配厂 
12~17位:顺序号
 
 /**
* 校验车辆VIN编号是否有效
* <li>使用vin的校验算法,直接计算出vin是否有效</li>
* @param string $sVin 车辆的VIN码
* @return boolean true:校验通过 | false:校验失败
*/
public static function checkVin($sVin)
{
$sVin = trim($sVin);
if(empty($sVin))return false;
$aCharMap = array(
'0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,
'A'=>1,'B'=>2,'C'=>3,'D'=>4,'E'=>5,'F'=>6,'G'=>7,'H'=>8,'J'=>1,'K'=>2,
'L'=>3,'M'=>4,'N'=>5,'P'=>7,'R'=>9,'S'=>2,'T'=>3,'U'=>4,'V'=>5,'W'=>6,
'X'=>7,'Y'=>8,'Z'=>9
);
$aWeightMap = array(8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2);
$aCharKeys = array_keys($aCharMap); //取出key
$sVin = strtoupper($sVin); //强制输入大写

if (strlen($sVin) !== 17){
return false; //长度不对
}elseif (!in_array($sVin{8}, array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'X')) ) {
return false; //校验位的值不对
}
//检查vincode字符是否超表
for ($i=0; $i<17; $i++){
if (!in_array($sVin{$i}, $aCharKeys)){
return false; //超出范围
}
}
//计算权值总和
$iTotal = 0;
for ($i=0; $i<17; $i++){
$iTotal += $aCharMap[$sVin{$i}] * $aWeightMap[$i];
}
//计算校验码
$sMode = $iTotal % 11;
if ($sMode < 10 && $sMode === intval($sVin{8}) ){
return true;
}elseif (10 === $sMode && 'X' === $sVin{8}){
return true;
}else{
return false;
}
}

 

0 个评论

要回复文章请先登录注册