string[] testMarks = { // 1. Последовательная серия (проверка инкремента цифр) "A001AA77", "A002AA77", "A003AA77", "A010AA77", "A099AA77", "A100AA77", "A500AA77", "A998AA77", "A999AA77", // 2. Граничные переходы букв (A999AA -> B001AA) "B999AA77", "X999AA77", "A999BA77", "A999XA77", "A999AX77", "X999XX77", // 3. Разные регионы (2 и 3 знака) "E555KK01", "M100HH02", "B777BB16", "T001TT99", "A123AA102", "X888XX177", "K001MK799", "C500CC190", // 4. Группа случайных номеров для массовой проверки "K123AB77", "M456BC77", "H789CE77", "P012EK77", "C345KH77", "T678HM77", "Y901MO77", "O234OP77", "A567PC77", "B890CT77", "E111TY77", "K222YX77", "M333XA77", "H444XB77", "P555XE77", "C666XK77", "T777XM77", "Y888XH77", "O999XO77", "A001XP77", "B010XC77", "E100XT77", "K200XY77", "M300XX77", // 5. Номера с разными буквами (все 12 разрешенных) "A111AA11", "B222BB22", "E333EE33", "K444KK44", "M555MM55", "H666HH66", "O777OO77", "P888PP88", "C999CC99", "T100TT01", "Y200YY02", "X300XX03", // 6. Еще немного из разных регионов (от 04 до 197) "A001AA04", "B002BB05", "E003EE06", "K004KK07", "M005MM08", "H006HH09", "O007OO10", "P008PP11", "C009CC12", "T010TT13", "Y011YY14", "X012XX15", "A013AA16", "B014BB17", "E015EE18", "K016KK19", "M017MM21", "H018HH22", "O019OO23", "P020PP24", "C021CC25", "T022TT26", "Y023YY27", "X024XX28", "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" }; int i = 0; int j = 0; foreach (string v in testMarks) { bool isValid = REG_MARK_LIB.REG_MARK.CheckMark(v); if (isValid) { i++; // Генерируем границу: берем текущую серию (буквы) и ставим 999 // Пример: если v = "A123BC77", то rangeEnd будет "A999BC77" string rangeEnd = $"{v[0]}999{v.Substring(4)}"; string nextMark = REG_MARK_LIB.REG_MARK.GetNextMarkAfter(v); // В качестве rangeStart для метода логично передать сам v или следующий за ним string nextInRange = REG_MARK_LIB.REG_MARK.GetNextMarkAfterInRange(v, v, rangeEnd); Console.WriteLine($"Номер ТС: Верный"); Console.WriteLine($"Текущая марка: {v} \t Следующая марка: {nextMark}"); Console.WriteLine($"Интервал до {rangeEnd}: {nextInRange}"); } else { j++; Console.WriteLine($"Номер ТС: Не верный ({v})"); } Console.WriteLine("--------------------------------------------------"); } Console.WriteLine($"Успешно: {i}"); Console.WriteLine($"Не успешно: {j}"); Console.ReadLine();