有没有人知道PHP,或Perl,或Python(或任何其他语言,我可以轻松转换代码)的ISO 3779车辆VIN解码器库可用作开源/免费软件?
即使只是解码WMI部分(前3个位置)的东西也会为我节省很多时间.提前致谢.
我会让你从维基百科中删除数据,但下面是一个你可以扩展的快速(模块化)样本(完成WMI->Init()方法).我也可能会令VINLookup类单身或折断的WMI到数据库(某处标准化数据,并把它当作一个基地,33号像我有[可能]).
// http://en.wikipedia.org/wiki/Vehicle_identification_number#World_Manufacturer_Identifier
define('VIN_CHARACTERS', 'ABCDEFGHJKLMNPRSTUVWXYZ1234567890'); // no I, O or Q & 0 is last.
class WMI
{
public $country;
public $region;
public $low;
public $high;
public function __construct($country,$region,$low,$high)
{
$this->country = $country;
$this->region = $region;
$this->low = $low;
$this->high = $high;
}
private static function CodeToDec($code)
{
if (strlen($code) != 2)
return false;
return (strpos(VIN_CHARACTERS, $code{0}) * strlen(VIN_CHARACTERS)) + strpos(VIN_CHARACTERS, $code{1});
}
public function IsMatch($vin)
{
// first, grab the first 2 characters
$code = substr($vin,0,2);
// next, see if it's in range
// we do this by converting it to a numeric
$_low = WMI::CodeToDec($this->low);
$_high = WMI::CodeToDec($this->high);
$_code = WMI::CodeToDec($code);
return (($_code >= $_low) && ($_code <= $_high));
}
public function __toString()
{
return sprintf("%s, %s (%s, %s)", $this->country, $this->region, $this->low, $this->high);
}
}
class VINLookup
{
private $vin;
private $wmis = array();
public function __construct($vin)
{
if (!VINLookup::IsValid($vin))
throw new Exception('Invalid VIN specified');
$this->vin = $vin;
$this->Init();
}
private function Init()
{
$this->wmis = array(
new WMI('South Africa', 'Africa', 'AA', 'AH'),
new WMI('Ivory Coast', 'Africa', 'AJ', 'AN'),
new WMI('(not assigned)', 'Africa', 'AP', 'A0'),
new WMI('Angola', 'Africa', 'BA', 'BE'),
new WMI('Kenya', 'Africa', 'BF', 'BK'),
new WMI('United States', 'North America', '1A', '10'),
new WMI('Canada', 'North America', '2A', '20'),
new WMI('Mexico', 'North America', '3A', '3W'),
new WMI('Costa Rica', 'North America', '3X', '37'),
);
}
public function GetCountry()
{
foreach ($this->wmis as $wmi)
{
if ($wmi->IsMatch($this->vin))
return $wmi;
}
return false;
}
public static function IsValid($vin)
{
return preg_match('/^[A-HJ-NPR-Z0-9]{17}$/',$vin);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
// check for a valid VIN number supplied
VINLookup::IsValid(<vin>);
// create a new VINLookup with the specified VIN
$lookup = new VINLookup(<vin>);
// retrieve the _Country_ object (above), or FALSE if no country match was found.
$lookup->GetCountry();
Run Code Online (Sandbox Code Playgroud)
美国国家公路交通安全管理局拥有所有 WMI 编号的数据库。以下是相关网页的链接:NHTSA WMI 数据
他们引用了包含数据的 ftp 站点:WMI 数据源
您可以下载 565.txt 文件或包含数据的 mdb 数据库。这似乎是一个非常完整的数据库。