Visual C# 2005 Guide
Check Digits

The following skeleton program is to be used to calculate the check digits for EAN8 & EAN13 barcodes as well as 1SBN-10 check digits.

Th only procedures that you need to edit are the ones that calculate the different types of check digit.

static void Main(string[] args)
{
   int menItem = GetMenuChoice();
   while (menItem != 4)
   {
      string codeToConvert = GetInputString();
         switch (menItem)
         {
            case 1:
            makeEAN8(codeToConvert);
            break;
            case 2:
            makeEAN13(codeToConvert);
            break;
            case 3:
            makeISBN10(codeToConvert);
            break;
         }
      menItem = GetMenuChoice();
      }
   }

static int GetMenuChoice()
{
   //function to display menu and read in user choice
   Console.Clear();
   Console.WriteLine("Check Digit Calculation Program");
   Console.WriteLine("*******************************");
   Console.WriteLine();
   Console.WriteLine("1. EAN-8");
   Console.WriteLine("2. EAN-13");
   Console.WriteLine("3. ISBN-10");
   Console.WriteLine("4. Quit Program");
   int menChoice = System.Convert.ToInt32(Console.ReadLine());
   return menChoice;
}

static string GetInputString()
{
   Console.WriteLine();
   Console.Write("Enter the code to convert: ");
   return Console.ReadLine();
}

static void makeEAN8(string code7)
{
   //add code to calculate EAN-8 check digit and output to the console
   Console.WriteLine("Calculate EAN-8 Check Digit");
   WaitForInput();
}

static void makeEAN13(string code12)
{
   //add code to calculate EAN-13 check digit and output to the console
   Console.WriteLine("Calculate EAN-13 Check Digit");
   WaitForInput();
}

static void makeISBN10(string code9)
{
   //add code to calculate ISBN-10 check digit and output to the console
   Console.WriteLine("Calculate ISBN-10 Check Digit");
   WaitForInput();
}

static void WaitForInput()
{
   Console.WriteLine();
   Console.WriteLine("Press any key to continue");
   Console.ReadLine();
}

General Tips

The codes entered at the console are treated as strings - this avoids loss of information where codes begin with 0.

Look carefully at the EAN-8 procedure. The parameter code7 is used to store the 7 digits for which we want to calculate a check digit.

To work out the total of the 2nd, 4th and 6th items, you would write something like,

int totEven = System.Convert.ToInt32(code7.Substring(1, 1)) + System.Convert.ToInt32(code7.Substring(3, 1)) + System.Convert.ToInt32(code7.Substring(5, 1));

Remember that the first position in the substring is always 0.

Pseudocode Algorithms

EAN-8

totOdd ← 3 x (1st + 3rd + 5th + 7th)
totEven ← 2nd + 4th + 6th
bigTotal ← totOdd + totEven
IF bigTotal Mod 10 is equal to 0
   THEN checkDigit ← 0
   ELSE checkDigit ← 10 - (bigTotal Mod 10)
END IF
Output checkDigit

EAN-13 &ISBN-13

totOdd ← 1st + 3rd + 5th + 7th + 9th+ 11th
totEven ←3 x ( 2nd + 4th + 6th + 8th + 10th + 12th)
bigTotal ← totOdd + totEven
IF bigTotal Mod 10 is equal to 0
   THEN checkDigit ← 0
   ELSE checkDigit ← 10 - (bigTotal Mod 10)
END IF
Output checkDigit

ISBN-10

bigTotal ← 0
FOR i ← 0 To 8
   bigTotal ← bigTotal + (inputCode.SubString(i,1) x (i+1))
NEXT i
remainder ← bigTotal Mod 11
IF remainder is equal to 10
   THEN checkDigit = "X"
   ELSE checkDigit = ConvertToString(remainder)
END IF
Output checkDigit