C# 校验车架号(VIN码)第9位是否有效算法
public static bool checkVIN(string vin)
{
//VIN码从第1位到第17位的“加权值”:
Dictionary<int, int> vinMapWeighting = new Dictionary<int, int>();
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
vinMapWeighting.Add(, );
//VIN码各位数字的“对应值”
Dictionary<string, int> vinMapValue = new Dictionary<string, int>();
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("", );
vinMapValue.Add("A", );
vinMapValue.Add("B", );
vinMapValue.Add("C", );
vinMapValue.Add("D", );
vinMapValue.Add("E", );
vinMapValue.Add("F", );
vinMapValue.Add("G", );
vinMapValue.Add("H", );
vinMapValue.Add("J", );
vinMapValue.Add("K", );
vinMapValue.Add("M", );
vinMapValue.Add("L", );
vinMapValue.Add("N", );
vinMapValue.Add("P", );
vinMapValue.Add("R", );
vinMapValue.Add("S", );
vinMapValue.Add("T", );
vinMapValue.Add("U", );
vinMapValue.Add("V", );
vinMapValue.Add("W", );
vinMapValue.Add("X", );
vinMapValue.Add("Y", );
vinMapValue.Add("Z", );
bool reultFlag = false;
string uppervin = vin.ToLower();
//排除字母O、I
if (vin == null || uppervin.IndexOf("O") >= || uppervin.IndexOf("I") >= )
{
reultFlag = false;
}
else
{
//1:长度为17
if (vin.Length == )
{
int len = uppervin.Length;
string[] vinArr = new string[len];
for (int i = ; i < len; i++)
{
vinArr[i] = uppervin.Substring(i, );
}
int amount = ;
for (int i = ; i < vinArr.Length; i++)
{
//VIN码从从第一位开始,码数字的对应值×该位的加权值,计算全部17位的乘积值相加
if (vinMapValue.ContainsKey(vinArr[i].ToUpper()))
amount += vinMapValue[vinArr[i].ToUpper()] * vinMapWeighting[i + ];
}
//乘积值相加除以11、若余数为10,即为字母X
if (amount % == )
{
if (vinArr[].ToUpper() == "X")
{
reultFlag = true;
}
else
{
reultFlag = false;
}
}
else
{
//VIN码从从第一位开始,码数字的对应值×该位的加权值,计算全部17位的乘积值相加除以11,所得的余数,即为第九位校验值
if (vinMapValue.ContainsKey(vinArr[].ToUpper()))
{
if (amount % != vinMapValue[vinArr[].ToUpper()])
{
reultFlag = false;
}
else
{
reultFlag = true;
}
}
}
}
//1:长度不为17
if (!vin.Equals("") && vin.Length != )
{
reultFlag = false;
}
}
return reultFlag;
}
C# 校验车架号(VIN码)第9位是否有效算法的更多相关文章
- 车牌,车架号,VIN码毫秒识别技术,汽车后市场的春天到来了
vin码(车架号)识别运用 不仅在制造.销售.保养.保险.车辆评估.交易环节会需要录入汽车的VIN码,在交通事故处理中,作为汽车身份唯一识别码,VIN码是处理事故的执法人员必须要记录的信息之一.随着汽 ...
- 车架号VIN码识别,合格证,购车发票,房产证,车牌,驾驶证,行驶证,征信报告等等识别 从易鑫、大搜车、淘车网,看汽车金融发展新模式
随着我国汽车保有量和产销量的持续增长,汽车技术的日趋成熟,以及互联网+对汽车行业的不断影响,汽车金融的市场规模逐步扩大,市场主体逐步丰富,汽车金融模式也在不断演进. 2016年左右,美国主要汽车厂商通 ...
- VIN码/车架号的详解,车架号识别,VIN码识别,OCR车架号识别能带来什么
各位车主在车检时不知道有没有注意到一件事,就是工作人员会打开车前盖在前围钢板上拓一张条码.下面来给大家介绍一下,这张条码就是VIN号,俗称钢印号,就像我们每个人都有自己的身份证号码一样,这也是汽车界的 ...
- VIN码识别,车架号识别,OCR扫描工具
近年二手车交易市场火爆,对二手车估值需要了详细解二手车的历史状况,车架号(VIN码)是车辆唯一的身份标识,也是了解二手车车况的入口,车商和二手车平台会频繁的进行车况查询,VIN码扫描识别技术给车辆估值 ...
- VIN码识别:毫秒间99%精准识别
科技改变生活.几年前,人工智能还仅是一个噱头,现在已逐渐融入我们的工作和生活,代替了一些重复性的.繁杂的人工劳动,在提高工作效率的同时,提升了客户体验. 车架号也叫VIN码,由17位数字和字母混合组成 ...
- 汽车VIN码,车架号,移动端,服务器端OCR识别 技术公司
很多人在购买车辆的时候,只关注性能.外观.内饰等,其实真正的内行是首先看车辆的VIN码,也叫车架号码. VIN码(车架号码)是一辆车的唯一身份证明,一般在车辆的挡风玻璃处,有的在车辆防火墙上,或B柱铭 ...
- 我的天哪,现在的移动VIN码识别已经这么。。
VIN码是英文(Vehicle Identification Number)的缩写,译为车辆识别代码,又称车辆识别码,车辆识别代码,车辆识别号,车辆识别代号,VIN码是表明车辆身份的代码.VIN码由1 ...
- 为什么说汽车VIN码是汽车唯一的"身份证"
人有身份证,那么车有吗?当然了,汽车也是有"身份证"的,出厂时就会跟着车辆一起出生, 一般在车辆的挡风玻璃处.按照国际SAE国际规定,Vin码由17位字符组成,其中包含了车辆的生产 ...
- 汽车VIN码识别/汽车车架号OCR识别,移动端VIN码识别,OCR扫描工具
本文推荐了一项汽车VIN码自动识别技术,用户通过手机“扫一扫”的简单操作,就可以快速识别VIN码,查询到车辆的详细信息,为汽修汽配.二手车交易.车辆监管.查勘理赔提高工作效率. VIN是英文Vehic ...
随机推荐
- js常用时间转换函数
1.秒转换为时分秒 // 秒转换为时分秒 export function secExchangeMoment(value = 0){ let secondTime = parseInt(value); ...
- smarty建的mvc环境
================================搭建MVC结构================================基于MVC,解耦合 (高内聚,低耦合),优点:易维护.易扩 ...
- Spark中的CombineKey()详解
CombineKey()是最常用的基于键进行聚合的函数,大多数基于键聚合的函数都是用它实现的.和aggregate()一样,CombineKey()可以让用户返回与输入数据的类型不同的返回值.要理解C ...
- MATLAB常用快捷键总结
MATLAB 命令栏显示处理的常用命令 清屏:clc 紧凑显示格式:format compact 宽松显示格式:format loose 数据高精度显示:format longG 数据低精度显示:fo ...
- 一步一步搭建Nuget私服
大致流程:1. 通过VS创建一个Web空项目,然后通过Nuget引入Nuget.Server(目前最新版3.2.1).2. 直接将这个Web项目发布到IIS.3. 通过nuget.exe打包*.nup ...
- 灵活配置tomcat根目录网站
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDepl ...
- windows10 企业版 安装应用商店
安装windows10企业版后,提示 没有nvdia control panel 在其他位置下载均不成功 必须在win10自带的应用商店中安装,但win10企业版没有应用商店, 使用下方的网盘安装应用 ...
- nginx服务报错解决
403禁止访问解决 . 重要:修改配置文件使用虚拟机,否则怎么配置都不生效,添加如下用户 [root@host---- html]# ll /etc/nginx/nginx.conf -rw-r--r ...
- swift 跳转到系统设置/网络/推送提醒
使用App-Prefs做域跳转,代码如下: if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID"), UIAppli ...
- save()和savaorupdate的区别
hibernate的保存 hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,在这里细说一下,以便区别: 一.预备知识: 在所有之前,说明一下,对于hibernate,它的对 ...