Fifth push
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -14,36 +14,35 @@ 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", "KZC12345678123456", "Z1B12345678123456", "Z5S12345678123456", "X7L12345678123456" // Казахстан, Литва, Renault (РФ)
|
||||
|
||||
// ДОПОЛНИТЕЛЬНЫЕ (Казахстан, Узбекистан, Чехия)
|
||||
"KS112345678123456", "XWB12345678123456", "TMB12345678123456", "KZC12345678123456", "XW812345678123456",
|
||||
"3HG12345678123456", "8AW12345678123456", "Z1B12345678123456", "Z5S12345678123456", "VF112345678123456"
|
||||
};
|
||||
|
||||
|
||||
string[] testMarks = {
|
||||
// 1. Последовательная серия (проверка инкремента цифр)
|
||||
"A001AA77", "A002AA77", "A003AA77", "A010AA77", "A099AA77", "A100AA77", "A500AA77", "A998AA77", "A999AA77",
|
||||
@@ -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,12 +82,13 @@ 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;
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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