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

@@ -46,7 +46,7 @@
<Reference Include="System.Xml" />
<Reference Include="VIN-LIB, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\VIN-LIB\VIN-LIB\bin\Debug\VIN-LIB.dll</HintPath>
<HintPath>..\..\VIN-LIB\VIN-LIB\bin\Release\VIN-LIB.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>

View File

@@ -14,35 +14,34 @@ namespace ConsoleApp1
{
string[] testVins = new string[]
{
// РОССИЯ (XTA - АвтоВАЗ, X7L - Renault)
"XTA210700L1234567", "XTA211400M1234567", "X7LHSR450J1234567", "XTA11183091234567", "XTA210900V1234567",
// --- ЕВРОПА ---
"WBA12345601123456", "WDCABCDEF11123456", "VF3CC8HZB81234567", "ZFA18200001234567", "TMBABCDEF51123456", // Германия, Франция, Италия, Чехия
"SAL12345678123456", "YS312345678123456", "VSS12345678123456", "UU1ABCDEF01123456", "Y312345678123456", // Британия, Швеция, Испания, Румыния, Беларусь
// ГЕРМАНИЯ (WBA - BMW, WVG - VW, WDC - Mercedes)
"WBA316000K1234567", "WVWZZZ1JZ1W123456", "WDC1690311J123456", "WBA530D00L1234567", "WVGZZZ5NZCW123456",
// --- РОССИЯ И СНГ ---
"X3912345678123456", "XTA210700L1234567", "Z6123456731234567", "XWB12345678123456", "XW812345678123456", // АвтоВАЗ, КамАЗ, Узбекистан
// США (1FA - Ford, 1GC - Chevrolet)
"1FA6P8CF0E1234567", "1G6AF57V041234567", "1FMEU34E071234567", "1GCGK23G0B1234567", "1FM5K8GT0H1234567",
// --- СЕВЕРНАЯ АМЕРИКА ---
"1FA6P8CF0E1234567", "1G6AF57V041234567", "2FT12345678123456", "3HG12345678123456", "1FM5K8GT0H1234567", // США, Канада, Мексика
// ЯПОНИЯ (JTD - Toyota, JHM - Honda)
"JTD12345678123456", "JHMRE485081234567", "JTDKB22U001234567", "JHMCV1650C1234567", "JTDGX31P0E1234567",
// --- АЗИЯ ---
"JTD12345678123456", "JHMRE485081234567", "KNAJP241261234567", "KMHCT41M0A1234567", "LSV12345678123456", // Япония, Корея, Китай
"ML12345678123456", "PL12345678123456", "NL12345678123456", "RA12345678123456", "MA12345678123456", // Таиланд, Малайзия, Турция, ОАЭ, Индия
// ЮЖНАЯ КОРЕЯ (KNA - Kia, KMH - Hyundai)
"KNAJP241261234567", "KMHCT41M0A1234567", "KNAKU4120D1234567", "KMHSH51J0B1234567", "KNAJX5240L1234567",
// --- ЮЖНАЯ АМЕРИКА ---
"9312345678123456", "8AW12345678123456", "9BW12345678123456", "8L12345678123456", "9S12345678123456", // Бразилия, Аргентина, Эквадор, Уругвай
// МАЛЫЕ ПРОИЗВОДИТЕЛИ (3-й символ '9')
// Здесь страна определяется по 12-14 символам (в примерах это X39 - Россия)
"X3912345678X39456", "W0912345678W09123", "Y9912345678Y99123", "Z9912345678Z99123", "99912345678999123",
// --- АФРИКА ---
"AA123456781234567", "DA12345678123456", "FA12345678123456", "BA12345678123456", "CL12345678123456", // ЮАР, Египет, Гана, Ангола, Тунис
// ФРАНЦИЯ И ИТАЛИЯ (VF3 - Peugeot, ZFA - Fiat)
"VF3CC8HZB81234567", "ZFA18200001234567", "VF7LC5FW091234567", "ZAR93900001234567", "VF32CKFVC21234567",
// --- ОКЕАНИЯ ---
"6A12345678123456", "7A12345678123456", "6F12345678123456", "7E12345678123456", "6G12345678123456", // Австралия, Новая Зеландия
// РАЗНЫЕ РЕГИОНЫ (Китай, Великобритания, Швеция)
"LSV12345678123456", "SAL12345678123456", "YS312345678123456", "LNV12345678123456", "SAB12345678123456",
// ДОПОЛНИТЕЛЬНЫЕ (Казахстан, Узбекистан, Чехия)
"KS112345678123456", "XWB12345678123456", "TMB12345678123456", "KZC12345678123456", "XW812345678123456",
"3HG12345678123456", "8AW12345678123456", "Z1B12345678123456", "Z5S12345678123456", "VF112345678123456"
// --- РЕДКИЕ / КАЗАХСТАН ---
"KS112345678123456", "KZC12345678123456", "Z1B12345678123456", "Z5S12345678123456", "X7L12345678123456" // Казахстан, Литва, Renault (РФ)
};
string[] testMarks = {
// 1. Последовательная серия (проверка инкремента цифр)
@@ -70,7 +69,7 @@ namespace ConsoleApp1
"A025AA29", "B026BB30", "E027EE31", "K028KK32", "M029MM33", "H030HH34", "O031OO35", "P032PP36",
"C033CC37", "T034TT38", "Y035YY39", "X036XX40", "A037AA41", "B038BB42", "E039EE43", "K040KK44",
"M041MM45", "H042HH46", "O043OO47", "P044PP48", "C045CC49", "T046TT50", "Y047YY51", "X048XX52",
"A100AA177", "B200BB197", "E300EE199", "K400KK777"
"A100AA177", "B200BB197", "E300EE199", "M999MP159"
};
/*
int i = 0;
@@ -83,13 +82,14 @@ namespace ConsoleApp1
j++;
Console.WriteLine($"Страна: {VIN_LIB.VIN.GetVINCountry(v)}");
Console.WriteLine($"Вин номер: {(VIN_LIB.VIN.CheckVIN(v) ? "Верный" : "Не верный")}");
Console.WriteLine($"{v}");
Console.WriteLine($"Год: {VIN_LIB.VIN.GetTransportYear(v)}");
}
Console.WriteLine($"Успешно: {i}");
Console.WriteLine($"Не успешно: {j}");
Console.ReadLine();
*/
Console.ReadLine();*/
int i = 0;
int j = 0;
foreach (string v in testMarks)
@@ -110,6 +110,7 @@ namespace ConsoleApp1
Console.WriteLine($"Номер ТС: Верный");
Console.WriteLine($"Текущая марка: {v} \t Следующая марка: {nextMark}");
Console.WriteLine($"Интервал до {rangeEnd}: {nextInRange}");
Console.WriteLine($"Возможное кол-во {REG_MARK_LIB.REG_MARK.GetCombinationsCountInRange(v,rangeEnd)}");
}
else
{

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