• C# 校验车架号(VIN码)第9位是否有效算法


         public static bool checkVIN(string vin)
            {
                //VIN码从第1位到第17位的“加权值”:
                Dictionary<int, int> vinMapWeighting = new Dictionary<int, int>();
                vinMapWeighting.Add(1, 8);
                vinMapWeighting.Add(2, 7);
                vinMapWeighting.Add(3, 6);
                vinMapWeighting.Add(4, 5);
                vinMapWeighting.Add(5, 4);
                vinMapWeighting.Add(6, 3);
                vinMapWeighting.Add(7, 2);
                vinMapWeighting.Add(8, 10);
                vinMapWeighting.Add(9, 0);
                vinMapWeighting.Add(10, 9);
                vinMapWeighting.Add(11, 8);
                vinMapWeighting.Add(12, 7);
                vinMapWeighting.Add(13, 6);
                vinMapWeighting.Add(14, 5);
                vinMapWeighting.Add(15, 4);
                vinMapWeighting.Add(16, 3);
                vinMapWeighting.Add(17, 2);
                //VIN码各位数字的“对应值”
                Dictionary<string, int> vinMapValue = new Dictionary<string, int>();
                vinMapValue.Add("0", 0);
                vinMapValue.Add("1", 1);
                vinMapValue.Add("2", 2);
                vinMapValue.Add("3", 3);
                vinMapValue.Add("4", 4);
                vinMapValue.Add("5", 5);
                vinMapValue.Add("6", 6);
                vinMapValue.Add("7", 7);
                vinMapValue.Add("8", 8);
                vinMapValue.Add("9", 9);
                vinMapValue.Add("A", 1);
                vinMapValue.Add("B", 2);
                vinMapValue.Add("C", 3);
                vinMapValue.Add("D", 4);
                vinMapValue.Add("E", 5);
                vinMapValue.Add("F", 6);
                vinMapValue.Add("G", 7);
                vinMapValue.Add("H", 8);
                vinMapValue.Add("J", 1);
                vinMapValue.Add("K", 2);
                vinMapValue.Add("M", 4);
                vinMapValue.Add("L", 3);
                vinMapValue.Add("N", 5);
                vinMapValue.Add("P", 7);
                vinMapValue.Add("R", 9);
                vinMapValue.Add("S", 2);
                vinMapValue.Add("T", 3);
                vinMapValue.Add("U", 4);
                vinMapValue.Add("V", 5);
                vinMapValue.Add("W", 6);
                vinMapValue.Add("X", 7);
                vinMapValue.Add("Y", 8);
                vinMapValue.Add("Z", 9);
                bool reultFlag = false;
                string uppervin = vin.ToLower();
                //排除字母O、I
                if (vin == null || uppervin.IndexOf("O") >= 0 || uppervin.IndexOf("I") >= 0)
                {
                    reultFlag = false;
                }
                else
                {
                    //1:长度为17
                    if (vin.Length == 17)
                    {
                        int len = uppervin.Length;
                        string[] vinArr = new string[len];
                        for (int i = 0; i < len; i++)
                        {
                            vinArr[i] = uppervin.Substring(i, 1);
                        }
                        int amount = 0;
                        for (int i = 0; i < vinArr.Length; i++)
                        {
                            //VIN码从从第一位开始,码数字的对应值×该位的加权值,计算全部17位的乘积值相加
                            if (vinMapValue.ContainsKey(vinArr[i].ToUpper()))
                                amount += vinMapValue[vinArr[i].ToUpper()] * vinMapWeighting[i + 1];
                        }
                        //乘积值相加除以11、若余数为10,即为字母X
                        if (amount % 11 == 10)
                        {
                            if (vinArr[8].ToUpper() == "X")
                            {
                                reultFlag = true;
                            }
                            else
                            {
                                reultFlag = false;
                            }
                        }
                        else
                        {
                            //VIN码从从第一位开始,码数字的对应值×该位的加权值,计算全部17位的乘积值相加除以11,所得的余数,即为第九位校验值
                            if (vinMapValue.ContainsKey(vinArr[8].ToUpper()))
                            {
                                if (amount % 11 != vinMapValue[vinArr[8].ToUpper()])
                                {
                                    reultFlag = false;
                                }
                                else
                                {
                                    reultFlag = true;
                                }
                            }
                        }
                    }
                    //1:长度不为17
                    if (!vin.Equals("") && vin.Length != 17)
                    {
                        reultFlag = false;
                    }
                }
                return reultFlag;
            }
  • 相关阅读:
    OWIN katana注册中间件的几种写法
    ASP.NET Identity(处理身份数据存储) 与 OWIN主机(实现katana验证授权)原理概括
    entity framework 查询
    Sencha CMD 4- 安装与首次使用
    比较const ,readonly, stitac readonly
    (二)给IE6-IE9中的input添加HTML5新属性-placeholder
    (一)IE8以下background不起作用
    大虾翻译(一):jQuery.extend()
    JavaScript之三:jQuery插件开发(一)
    《JavaScript DOM编程艺术》
  • 原文地址:https://www.cnblogs.com/CHNMurphy/p/11101506.html
Copyright © 2020-2023  润新知