public bool CheckPermission(ref string plateNumber, string loosedPlateNumber) { Vehicle vehicle = null; string[] expectedPlateNumber = null; if (plateNumber != string.Empty && plateNumber.Count() >= 5) { string tempPlateNumber = plateNumber; vehicle = Vehicles.SingleOrDefault(x => x.NumberPlate == tempPlateNumber); if (vehicle == null) { expectedPlateNumber = Vehicles.Select(x => x.NumberPlate).ToArray().Where(l => CalculationHelpers.LevenshteinDistance(tempPlateNumber, l) == 1).ToArray(); if (expectedPlateNumber.Count() == 1) { if (plateNumber.Count() == expectedPlateNumber[0].Count()) { string expectedString = expectedPlateNumber[0]; for (int i = 0; i < plateNumber.Count(); i++) { if (expectedString[i] == loosedPlateNumber[i] && expectedString[i] != plateNumber[i]) { vehicle = Vehicles.SingleOrDefault(x => x.NumberPlate == expectedString); plateNumber = expectedString; } } } } } } else { return(false); } return(true); }