using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
IList<Tuple<string,string>> data = new List<Tuple<string,string>>()
Tuple.Create("00000","00001"),
Tuple.Create("0000001", "0000002"),
Tuple.Create("99999", "A0000"),
Tuple.Create("AAAAA", "AAAAB"),
Tuple.Create("AAAAC", "AAAAD"),
Tuple.Create("AA900", "AA901"),
Tuple.Create("CAB37", "CAB38"),
Tuple.Create("FLA99", "FLB00"),
Tuple.Create("CAZ99", "CBA00"),
Tuple.Create("AZZ99", "BAA00")
AlphaNumericId temp = new AlphaNumericId(a.Item1);
var result = temp.Increment();
Console.WriteLine("Input value: {0}, Expected result: {1}, Actual result: {2}", a.Item1, a.Item2, result.Id);
public class AlphaNumericId
public AlphaNumericId(string id)
private IList<char> _id = new List<char>();
private void Disassemble(string id)
private string Assemble()
StringBuilder temp = new StringBuilder();
for (int i = _id.Count - 1; i >= 0; i--)
public AlphaNumericId Increment()
for (int i = 0; i < _id.Count; i++)
if (Regex.IsMatch(_id[i].ToString(), "\\d")) { _id[i] = char.Parse(Increment(int.Parse(_id[i].ToString())).ToString()); }
if (Regex.IsMatch(_id[i].ToString(), "\\D")) { _id[i] = Increment(_id[i]); }
if (_id[i] != '0' && _id[i] != 'Z') { break; }
else if (i > 0 && i < _id.Count - 1 && ((_id[i - 1] == '0' || _id[i - 1] == 'Z') || isReset))
if (Regex.IsMatch(_id[i].ToString(), "\\d")) { _id[i] = char.Parse(Increment(int.Parse(_id[i].ToString())).ToString()); }
if (Regex.IsMatch(_id[i].ToString(), "\\D") && isReset) { _id[i] = Increment(_id[i]); if(_id[i] == 'A') { isReset = false; } continue;}
if (Regex.IsMatch(_id[i].ToString(), "\\D")) { _id[i] = Increment(_id[i]); if (_id[i] == 'A') { isReset = true; } }
if (_id[i] != '0' && _id[i] != 'Z' && !isReset) { break; }
else if (i == _id.Count - 1 && ((_id[i - 1] == '0' || _id[i - 1] == 'Z') || isReset))
if (Regex.IsMatch(_id[i].ToString(), "[08]")) { _id[i] = char.Parse(Increment(int.Parse(_id[i].ToString())).ToString()); }
if (Regex.IsMatch(_id[i].ToString(), "[9]")) { _id[i] = 'A'; break; }
if (Regex.IsMatch(_id[i].ToString(), "[A-Y]")) { _id[i] = Increment(_id[i]); }
private char Increment(char ch)
if (ch == 'Z') { return 'A'; }
private int Increment(int ch)