C-Code für diese Kodierung:
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. versionS = "001101" (Version 13 ... als Dualzahl) kann man die 18-stellige Versionsangabe erzeugen
Der String versionS muss genau 6 Bits lang sein - ggf. wird links mit Nullen aufgefüllt.
Aufruf der Routine mit:
string versionBits = RS1(versionS, 18, "1111100100101");