<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Generate Luhn</Title>
      <Shortcut>GenerateLuhn</Shortcut>
      <Description>Generate Luhn [C#]</Description>
      <Author>Vidar Markussen</Author>
      <HelpUrl>/PreviewSnippet.aspx?SnippetID=eaf9d1d1-fd16-4a22-97f1-7d7c16a15106</HelpUrl>
      <SnippetTypes>
        <SnippetType>SurroundsWith</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Code Language="csharp"><![CDATA[		/// <summary>
		/// Input a KID number, and the return value is a mathematical
		/// Mod 10 value of this KID.
		/// </summary>
		/// <param name="sInput">KID to be evaluated</param>
		/// <returns>The Mod 10 Digit</returns>
		/// <example>
		/// KID: 0000001075000102004
		/// Check Digit: 7
		/// Math:
		///  0 0 0 0 0 0 1 0 7 5 0 0 0 1 0 2 0 0 4
		///  2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
		/// +0+0+0+0+0+0+2+0+5+5+0+0+0+1+0+2+0+0+8 = 23<br/>
		/// The digits in the two lines are Multiplicated<br/>
		/// ex: 7*2 = 14 = 1+4 = 5
		/// ex: 1*2 = 2
		/// If Sum Exeeds 9 digits are added ex: 14 = 1+4 = 5
		/// Take 10 - last digit = 10-3=7
		/// CheckDigit is then 7
		///</example>
		public int GenerateLuhn(string sInput)
		{
			int length = sInput.Length;
			int iLuhnKey;
			int sum = 0;
			int offset = length-1 % 2;
			byte[] digits = new System.Text.ASCIIEncoding().GetBytes(sInput);
            
			for (int i = 0; i < length; i++)
			{
				digits[i] -= 48;
				if (((i + offset) % 2) == 0)
					digits[i] *= 2;
        
				sum += (digits[i] > 9) ? digits[i] - 9 : digits[i];
			}
			int iModulo = sum%10;
			if(iModulo > 0)
				iLuhnKey = 10 - iModulo;
			else
				iLuhnKey = 0;
			return iLuhnKey;
		}]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>