根据算法规则进行匹配相似车辆
识别车牌的误差低于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;
}