public static char[] validchars = {'A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'};
public class NewZealandMinistryofHealthNumber
public static void Main()
bool isValid_oldformate = isValidNZMHN_oldformate("CGC2720");
Console.WriteLine(isValid_oldformate);
bool isValid_newformate = isValidNZMHN_newformate("DAB8233");
Console.WriteLine(isValid_newformate);
private static bool authenticateAlphachars(string alpha)
char[] avoidchars = {'I','O'};
foreach (char ch in avoidchars)
for (int i=0;i<alpha.Length;i++)
private static int getReminder_oldformate(string nzmhn)
for (int i=0;i<nzmhn.Length;i++)
foreach (char ch in Globals.validchars)
addition += (flag * (7 - i));
addition += ((Convert.ToInt32(nzmhn[i]) - 48) * (7 - i));
int answer = 11 - addition % 11;
if (answer == 0) return -1;
if (answer == 10) return 0;
private static int getReminder_newformate(string nzmhn)
for (int i=0;i<nzmhn.Length;i++)
if (char.IsLetter(nzmhn[i]))
foreach (char ch in Globals.validchars)
addition += (flag * (7 - i));
addition += ((Convert.ToInt32(nzmhn[i]) - 48) * (7 - i));
int answer = 24 - addition % 24;
if (answer == 0) return -1;
if (answer == 10) return 0;
private static bool isValidNZMHN_oldformate(string nzmhn)
if (nzmhn.Length != 7) return false;
string alphachars = nzmhn.Substring(0, 3);
if (!authenticateAlphachars(alphachars)) return false;
int wholestring_check = Convert.ToInt32(nzmhn[nzmhn.Length - 1]) - 48;
string wholestring = nzmhn.Substring(0, nzmhn.Length - 1);
int wholestring_reminder = getReminder_oldformate(wholestring);
if (wholestring_reminder != wholestring_check) return false;
private static bool isValidNZMHN_newformate(string nzmhn)
if (nzmhn.Length != 7) return false;
int wholestring_check = Convert.ToInt32(nzmhn[nzmhn.Length - 1]) - 48;
string wholestring = nzmhn.Substring(0, nzmhn.Length - 1);
if (!authenticateAlphachars(wholestring)) return false;
int wholestring_reminder = getReminder_newformate(wholestring);
if (wholestring_reminder != wholestring_check) return false;