vin查询 php源码,汽车VIN编号 有效性检查 PHP 验证算法

该代码段提供了一个用于校验车辆识别号码(VIN)有效性的PHP函数。它首先定义了字符映射和权重映射数组,然后检查VIN码的长度、校验位值及字符是否在有效范围内。通过计算每个字符的权值总和并根据特定算法验证校验位,最终确定VIN码是否有效。
摘要由CSDN通过智能技术生成

/**

* 校验车辆VIN编号是否有效

*

使用vin的校验算法,直接计算出vin是否有效

* @param string $sVin 车辆的VIN码

* @return boolean true:校验通过 | false:校验失败

*/

public function checkVin($sVin){

static $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

);

static $aWeightMap = array(8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2);

foreach (array_keys($aCharMap) as $sNode){//取出key

$aCharKeys[] = strval($sNode);

}

$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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值