Fifth push

This commit is contained in:
2026-03-31 11:19:18 +05:00
parent cd46c83af4
commit 0a6acc6bce
4 changed files with 80 additions and 41 deletions

View File

@@ -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

View File

@@ -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;
}
}
}