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");