private string RS1(string format, int gesamtlänge, string generator)
{
string start = format;
int noch = gesamtlänge - start.Length;
while (start.Length < gesamtlänge) start = start + "0";
if (start.IndexOf("1") >= 0)
{
while (start[0] == '0') start = start.Substring(1);
// Bestimmung der Format-DatenBits + ECC-Bits:
while (start.Length >= generator.Length)
{
string gen = generator;
while (gen.Length < start.Length) gen = gen + "0";
string erg = "";
for (int i = 0; i < start.Length; i++)
if (start[i] == gen[i]) erg = erg + "0"; else erg = erg + "1";
while (erg[0] == '0') erg = erg.Substring(1);
start = erg;
}
while (start.Length < noch) start = "0" + start;
start = format + start;
return start;
}
else return start;
}
mit z.B. ECLBits = "01" (Level L, s.u.) und maskenBits = "101" (Maske 5) kann man die 15-stellige Formatangabe erzeugen
Der String ECLBits + maskenBits muss genau 5 Bits lang sein!
string formatBits = RS1(ECLBits + maskenBits, 15, "10100110111");
ECL-Bits:
Error Correction Level --> 2 ECLBits
L --> 01
M --> 00
Q --> 11
H --> 10
Die Maske wird als Dualzahl mit 3 Stellen angegeben: 000 bis 111