diff --git a/ConsoleApp1/ConsoleApp1/ConsoleApp1.csproj b/ConsoleApp1/ConsoleApp1/ConsoleApp1.csproj
index a61c6e2..2663434 100644
--- a/ConsoleApp1/ConsoleApp1/ConsoleApp1.csproj
+++ b/ConsoleApp1/ConsoleApp1/ConsoleApp1.csproj
@@ -46,7 +46,7 @@
False
- ..\..\VIN-LIB\VIN-LIB\bin\Debug\VIN-LIB.dll
+ ..\..\VIN-LIB\VIN-LIB\bin\Release\VIN-LIB.dll
diff --git a/ConsoleApp1/ConsoleApp1/Program.cs b/ConsoleApp1/ConsoleApp1/Program.cs
index ff3382b..3618d35 100644
--- a/ConsoleApp1/ConsoleApp1/Program.cs
+++ b/ConsoleApp1/ConsoleApp1/Program.cs
@@ -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
{
diff --git a/VIN-LIB/VIN-LIB.sln b/VIN-LIB/VIN-LIB.sln
index c2fe958..398e4bf 100644
--- a/VIN-LIB/VIN-LIB.sln
+++ b/VIN-LIB/VIN-LIB.sln
@@ -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
diff --git a/VIN-LIB/VIN-LIB/VIN.cs b/VIN-LIB/VIN-LIB/VIN.cs
index e051726..7bd76ce 100644
--- a/VIN-LIB/VIN-LIB/VIN.cs
+++ b/VIN-LIB/VIN-LIB/VIN.cs
@@ -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;
}
}
}