Fifth push
This commit is contained in:
@@ -5,8 +5,6 @@ VisualStudioVersion = 17.13.35919.96
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VIN-LIB", "VIN-LIB\VIN-LIB.csproj", "{78203663-3306-4E81-922F-1A5A939A22BC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{714254CA-DDE4-42B2-8077-38D9F565C70F}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -17,10 +15,6 @@ Global
|
||||
{78203663-3306-4E81-922F-1A5A939A22BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{78203663-3306-4E81-922F-1A5A939A22BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{78203663-3306-4E81-922F-1A5A939A22BC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{714254CA-DDE4-42B2-8077-38D9F565C70F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{714254CA-DDE4-42B2-8077-38D9F565C70F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{714254CA-DDE4-42B2-8077-38D9F565C70F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{714254CA-DDE4-42B2-8077-38D9F565C70F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -178,6 +178,9 @@ namespace VIN_LIB
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static char CalculateCheckDigit(string vin)
|
||||
{
|
||||
int GetValue(char c)
|
||||
@@ -225,21 +228,17 @@ namespace VIN_LIB
|
||||
if (string.IsNullOrEmpty(vin) || vin.Length < 10)
|
||||
return 0;
|
||||
|
||||
// Год — это всегда 10-й символ VIN (индекс 9)
|
||||
|
||||
char yearCode = char.ToUpper(vin[9]);
|
||||
|
||||
if (YearCodes.TryGetValue(yearCode, out int baseYear))
|
||||
{
|
||||
// Поскольку коды повторяются каждые 30 лет (A было в 1980 и снова в 2010),
|
||||
// нужно определить, к какому периоду относится авто.
|
||||
// Современные системы обычно проверяют текущий год.
|
||||
|
||||
|
||||
int currentYear = DateTime.Now.Year;
|
||||
int year = baseYear;
|
||||
|
||||
// Если машина из будущего (например, код 'A' и сейчас 2024 год),
|
||||
// значит это 2010 год, а не 1980.
|
||||
while (year + 30 <= currentYear + 1) // +1, так как модельный год может обгонять календарный
|
||||
|
||||
while (year + 30 <= currentYear + 1)
|
||||
{
|
||||
year += 30;
|
||||
}
|
||||
@@ -249,7 +248,7 @@ namespace VIN_LIB
|
||||
|
||||
return 0;
|
||||
}
|
||||
public static bool CheckVIS(string vin)
|
||||
/*public static bool CheckVIS(string vin)
|
||||
{
|
||||
if (string.IsNullOrEmpty(vin) || vin.Length < 17)
|
||||
return false;
|
||||
@@ -271,6 +270,51 @@ namespace VIN_LIB
|
||||
if (!CheckVIS(vin))
|
||||
return false;
|
||||
return true;
|
||||
}*/
|
||||
|
||||
public static bool CheckVIN(string vin)
|
||||
{
|
||||
if (string.IsNullOrEmpty(vin) || vin.Length != 17)
|
||||
return false;
|
||||
|
||||
|
||||
string upperVin = vin.ToUpper();
|
||||
if (upperVin.Contains("I") || upperVin.Contains("O") || upperVin.Contains("Q"))
|
||||
return false;
|
||||
|
||||
|
||||
if (!CheckWMI(upperVin))
|
||||
return false;
|
||||
|
||||
char zone = upperVin[0];
|
||||
bool isNorthAmericaOrChina = "12345L".Contains(zone);
|
||||
|
||||
if (isNorthAmericaOrChina)
|
||||
{
|
||||
if (!CheckVDS(upperVin)) return false;
|
||||
}
|
||||
|
||||
if (!CheckVIS(upperVin))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static bool CheckVIS(string vin)
|
||||
{
|
||||
|
||||
for (int i = 13; i < 17; i++)
|
||||
{
|
||||
if (!char.IsDigit(vin[i])) return false;
|
||||
}
|
||||
|
||||
|
||||
char yearChar = vin[9];
|
||||
if (yearChar == 'U' || yearChar == 'Z' || yearChar == '0')
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user