zoukankan      html  css  js  c++  java
  • 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;
            }
  • 相关阅读:
    python之面向对象
    Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)
    Python之模块与包
    2.1 、寻找元素 (重要的选择器和筛选器)
    4、循环语句 和 异常处理
    7、其他知识点
    2、函数 面向对象
    3、数据类型
    1、初识JavaScript
    2、css
  • 原文地址:https://www.cnblogs.com/CHNMurphy/p/11101506.html
Copyright © 2011-2022 走看看