根据算法规则进行匹配相似车辆

识别车牌的误差低于2位显示入场记录信息 高于2位不显示
识别规则 根据省份误差为1位+后面数字字母误差为1位
只要两者结合误差率为 <= 2 即可显示匹配的车牌入场记录
也就是说省份错误为1位 + 后面任何1位错误 就显示 匹配相似信息

例如:豫A BCDE9  豫A BCDE8  粤A BCDE9  粤B BCDE9 新能源一个道理

 
//获取相关车辆信息
public static List<CurrentParking> GetCurrentParkingByCode(string  strPlateCode)
        {
           
            List<CurrentParking> inparkSimilarlist = new List<CurrentParking>();
            using (parkingContext  db= new parkingContext())
            {
               
                
                string sqlstr = "select * from InParking where Type=0 AND (PlateNO!=NULL OR PlateNO!='' ) order by InRecordId desc";
                ObjectResult<CurrentParking> objresult = db.ExecuteStoreQuery<CurrentParking>(sqlstr);
                if (objresult != null)
                {
                    var parklist = objresult.ToList();
                    //
                    //遍历数据循环取车牌信息进行对  传递的过来的车牌信息循环比对
                    for (int i = 0; i < parklist.Count; i++)
                    {
                        string plateNO = parklist[i].PlateCode;
                        //误差率为 <= 2 小于等于2位的  即可显示匹配的车牌入场记录
                        if (SimilarPlateNO(plateNO, strPlateCode) <= 2)
                        {
                            //满足条件的值保存到list集合中
                            inparkSimilarlist.Add(parklist[i]);
                        }
                    }

                }


            }
            return inparkSimilarlist;
        }
        /// <summary>
        /// 根据获取的车牌号和传递的在线车牌号进行相似度比对
        /// </summary>
        /// <param name=""></param>
        /// <param name=""></param>
        /// <returns></returns>
        public static int SimilarPlateNO(string plateNO ,string strPlateCode )
        {
            int nRet = 0;
            do {
                if (plateNO == null || strPlateCode == null)
                {
                    break;
                }

                if (plateNO .Length != strPlateCode .Length)
                {
                    break;
                }

                for (int i = 0; i < plateNO.Length; i++)
                {
                    //str[i]代表串中的字符是否相似  
                    //用循环出来车牌长度和传递过来车牌的字符串进行比对  累计计算相似的长度数
                    if (plateNO[i] == strPlateCode[i])
                    {
                        nRet++;
                    }
                }
              }
            while (false);
            
            // 循环出来的车牌长度-相似长度=误差识别度
            return plateNO.Length - nRet;
        }

 

posted @ 2018-08-29 10:24  蜜雪粮液  阅读(793)  评论(0编辑  收藏  举报