public static void Main(String[] args) {
Test("1:420+4:9####", "42091234");
Test("1:420+4:9####", "4209123A");
static void Test(string format, string value)
Console.WriteLine("format: {0}, value: {1}, result:{2}", format, value, CheckFormat(format, value));
static bool CheckFormat(string formatString, string value)
string[] tests = formatString.Split('+');
foreach(string test in tests)
string[] testElement = test.Split(':');
int startPos = int.Parse(testElement[0]);
string patterns = testElement[1];
string[] patternElements = patterns.Split(',');
foreach(string patternElement in patternElements)
if(startPos + patternElement.Length > value.Length)
for (int i = 0; i < patternElement.Length; i++)
switch(patternElement[i])
if (!Char.IsNumber(value[i]))
if (!Char.IsLetter(value[i]))
if(patternElement[i] != value[i])