ISO 3779 PHP中的车辆VIN解码器?

ISO 3779 PHP中的车辆VIN解码器?,php,decoder,vin,Php,Decoder,Vin,有人知道ISO 3779车辆VIN解码器库是以PHP、Perl或Python(或任何其他语言,我可以轻松转换代码)作为开源/免费软件提供的吗 即使只是解码WMI部分(前3个位置)也会节省我很多时间。提前谢谢 我将让您从维基百科中获取数据,但下面是一个快速(模块化)示例,您可以在此基础上进行扩展(完成WMI->Init()方法)。我还可能将VINLookup类设置为单例,或者将WMI中断到数据库中(在某个地方对数据进行规范化,并将其视为一个base-33数字,就像我[可能]) //http://e

有人知道ISO 3779车辆VIN解码器库是以PHP、Perl或Python(或任何其他语言,我可以轻松转换代码)作为开源/免费软件提供的吗

即使只是解码WMI部分(前3个位置)也会节省我很多时间。提前谢谢


我将让您从维基百科中获取数据,但下面是一个快速(模块化)示例,您可以在此基础上进行扩展(完成
WMI->Init()
方法)。我还可能将
VINLookup
类设置为单例,或者将WMI中断到数据库中(在某个地方对数据进行规范化,并将其视为一个base-33数字,就像我[可能])

//http://en.wikipedia.org/wiki/Vehicle_identification_number#World_Manufacturer_Identifier
定义('VIN_字符','ABCDEFGHJKLMPRSTUVXYZ1234567890');//没有I、O或Q&0是最后一个。
类WMI
{
国家公共财政;
公共区域;
公帑低;;
公帑高企;;
公共职能结构($country,$region,$low,$high)
{
$this->country=$country;
$this->region=$region;
$this->low=$low;
$this->high=$high;
}
私有静态函数CodeToDec($code)
{
如果(strlen($code)!=2)
返回false;
返回(strpos(VIN字符,$code{0})*strlen(VIN字符))+strpos(VIN字符,$code{1});
}
公共功能IsMatch($vin)
{
//首先,抓取前2个字符
$code=substr($vin,0,2);
//接下来,看看它是否在范围内
//我们通过将其转换为数字来实现这一点
$\u low=WMI::CodeToDec($this->low);
$\u high=WMI::CodeToDec($this->high);
$\u code=WMI::CodeToDec($code);
返回($代码>=$低)&($代码国家,$this->region,$this->low,$this->high);
}
}
类查找
{
私人$vin;
private$wmis=array();
公共函数构造($vin)
{
如果(!VINLookup::IsValid($vin))
抛出新异常(“指定的VIN无效”);
$this->vin=$vin;
$this->Init();
}
私有函数Init()
{
$this->wmis=array(
新WMI(‘南非’、‘非洲’、‘AA’、‘AH’),
新WMI(‘科特迪瓦’、‘非洲’、‘AJ’、‘安’),
新WMI(‘(未分配)’‘非洲’、‘AP’、‘A0’),
新WMI(‘安哥拉’、‘非洲’、‘BA’、‘BE’),
新WMI(‘肯尼亚’、‘非洲’、‘BF’、‘BK’),
新WMI(“美国”、“北美”、“1A”、“10”),
新WMI(‘加拿大’、‘北美’、‘2A’、‘20’),
纽约州(“墨西哥”、“北美”、“3A”、“3W”),
新WMI(‘哥斯达黎加’、‘北美’、‘3X’、‘37’),
);
}
公共职能(国家)
{
foreach($this->wmis作为$wmi)
{
如果($wmi->IsMatch($this->vin))
返回$wmi;
}
返回false;
}
公共静态函数有效($vin)
{
返回预匹配('/^[A-HJ-NPR-Z0-9]{17}$/',$vin);
}
}
用法:

// 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();
//检查是否提供了有效的VIN号
VINLookup::IsValid();
//使用指定的VIN创建新的VIN查找
$lookup=new VINLookup();
//检索_Country_u对象(如上),如果未找到国家匹配项,则检索FALSE。
$lookup->GetCountry();

国家公路交通安全管理局有一个包含所有WMI号码的数据库。以下是相关网页的链接:

它们引用包含以下数据的ftp站点:


您可以下载565.txt文件或包含数据的mdb数据库。这似乎是一个非常完整的数据库。

WMI似乎实际上是由ISO维护的列表。您可以很容易地确定哪个国家(使用wiki页面)但是要知道没有这个列表的确切制造商是不可能的。这个网站已经有了VIN查询,但它是一个CGI:虽然它不是PHP,但你可能对它感兴趣
// 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();