Пример #1
0
        public static string GenerateTokenString(int electionId, int wahlkreisId)
        {
            var ring = new TokenRing(47, 6);

            ring.AddBits(TokenRing.GetBitArrayFromInt(_counter++), 31);
            ring.AddBits(TokenRing.GetBitArrayFromInt(electionId), 7);
            ring.AddBits(TokenRing.GetBitArrayFromInt(wahlkreisId), 9);
            ring.AddSeal();

            var offset     = Rnd.Next() % 64;
            var offsetChar = Rnd.Next() % 32;

            ring.Rotate(offset);

            var finalRing = new TokenRing(64, 0);

            finalRing.AddBits(TokenRing.GetBitArrayFromInt(offsetChar), 5);
            finalRing.AddBits(TokenRing.GetBitArrayFromInt(offset), 6);
            finalRing.AddBits(new BitArray(ring.GetBits()), 53);

            var part1 = "";
            var part2 = "";
            var part3 = "";
            var part4 = "";

            var finalBits = finalRing.GetBits();

            var anz = 0;

            for (var i = 0; i < 64; i += 8)
            {
                var byteRange = new bool[8];
                Array.Copy(finalBits, i, byteRange, 0, 8);

                var allInt = TokenRing.GetIntFromBitArray(new BitArray(byteRange));

                var number     = allInt / 26;
                var numberChar = ((allInt % 26) + (i == 0 ? 0 : offsetChar)) % 26;
                var resultChar = CharArray[numberChar];

                if (anz++ < 4)
                {
                    part1 += number;
                    part2 += resultChar;
                }
                else
                {
                    part3 += number;
                    part4 += resultChar;
                }
            }

            return(string.Format("{0}-{1}-{2}-{3}", part1, part2, part3, part4));
        }