Hvad så med dette her?
using System;
namespace e677103b
{
enum Egenskab { NotValid = -1, Standard = 3, Enterprise = 5, Dummy = 13 };
class SerialNo
{
private static Random fate = new Random();
private static int[] digitWeight = { 4, 3, 2, 7, 6, 5, 4, 3, 2, 1 };
public static string Generate(Egenskab egenskab)
{
int[] digit = new int[10];
while (true)
{
// Modulus-11 algoritmen. Bruges bl.a. i CPR numre:
//
http://www.cpr.dk/Index/dokumenter.asp?o=11&n=0&h=11&t=1&d=396&s=4 while (true)
{
for (int digitNo = 0; digitNo < 9; digitNo++)
{
digit[digitNo] = (digitNo == 0) ? fate.Next(1, 10) : fate.Next(0, 10);
}
int summedWeight = 0;
for (int digitNo = 0; digitNo < 9; digitNo++)
{
summedWeight += digit[digitNo] * digitWeight[digitNo];
}
int controlDigit = 11 - summedWeight % 11;
if (controlDigit < 10)
{
digit[9] = controlDigit;
break;
}
}
// Konvertering fra int-array til et enkelt long.
long serialNo = 0;
for (int digitNo = 0; digitNo < 10; digitNo++)
{
serialNo *= 10;
serialNo += digit[digitNo];
}
// Encoding af egenskab.
if (serialNo % 13 == (int) egenskab)
{
// Returneres som en hex-værdi.
return string.Format("{0:X}", serialNo);
}
}
}
public static Egenskab Validate(string serialNo)
{
long serialNoLong = Convert.ToInt64(serialNo, 16);
serialNo = serialNoLong.ToString();
if (serialNo.Length != 10) return Egenskab.NotValid;
// Modulus-11 algoritmen.
int summedWeight = 0;
for (int digitNo = 0; digitNo < 10; digitNo++)
{
int digit = int.Parse(serialNo[digitNo].ToString());
summedWeight += digit * digitWeight[digitNo];
}
if (summedWeight % 11 != 0) return Egenskab.NotValid;
// decoding af egenskab.
for (Egenskab egenskab = Egenskab.NotValid; egenskab < Egenskab.Dummy; egenskab++)
{
if (serialNoLong % 13 == (int) egenskab) return egenskab;
}
return Egenskab.NotValid;
}
}
class Program
{
static void Main(string[] args)
{
Egenskab egenskab = Egenskab.Standard;
Console.WriteLine(egenskab);
string serialNo = SerialNo.Generate(egenskab);
Console.WriteLine(serialNo);
Egenskab valideretEgenskab = SerialNo.Validate(serialNo);
Console.WriteLine(valideretEgenskab);
}
}
}