示例#1
0
        public static string AlphanumericCoder(string input)
        {
            string BinaryString = " ";

            while (input.Length >= 2)
            {
                var Felement = AllDictionaries.AlphanumericDictionary(input[0]);
                var Selement = AllDictionaries.AlphanumericDictionary(input[1]);
                var sum      = Felement * 45 + Selement;
                var buff     = Convert.ToString(sum, 2);
                buff         = buff.PadLeft(11, '0');
                BinaryString = BinaryString.Insert(BinaryString.Length - 1, buff);
                input        = input.Remove(0, 2);
            }
            if (input.Length == 1)
            {
                var buff = Convert.ToString(AllDictionaries.AlphanumericDictionary(input[0]), 2);
                buff         = buff.PadLeft(6, '0');
                BinaryString = BinaryString.Insert(BinaryString.Length - 1, buff);
            }
            BinaryString = BinaryString.Replace(" ", "");
            return(BinaryString);
        }
示例#2
0
        static string LastAlgorithm(string data, int correctionLevel, int version)// версия минус один
        {
            var data2 = data;

            string[] CountOfBlocks  = File.ReadLines("versionsBlocks.txt").ElementAt(correctionLevel - 1).Split();
            var      NumberOfBlocks = int.Parse(CountOfBlocks[version]);

            string[] CountOfCorrectionBytes  = File.ReadLines("NumberOfCorrectionBytersPerBlock.txt").ElementAt(correctionLevel - 1).Split();
            var      NumberOfCorrectionBytes = int.Parse(CountOfCorrectionBytes[version]);

            string[,] ArrayCorrectionBytes = new string[NumberOfBlocks, NumberOfCorrectionBytes];
            string[,] info;
            if (NumberOfBlocks == 1)
            {
                info = new string[NumberOfBlocks, data.Length / 8];
            }
            else
            {
                info = new string[NumberOfBlocks, (data.IndexOf(' ') + 8) / 8];
            }


            var nb = 0;

            for (var i = 0; i < NumberOfBlocks; i++)
            {
                string block;
                if (data2.IndexOf(' ') == -1)
                {
                    block = data2;
                }
                else
                {
                    block = data2.Remove(data2.IndexOf(' '));
                }
                int[] bytes = new int[block.Length / 8];
                var   j     = 0;
                while (block.Length != 0)
                {
                    if (block.Length == 8)
                    {
                        bytes[j] = Convert.ToInt32(block, 2);
                    }
                    else
                    {
                        bytes[j] = Convert.ToInt32(block.Remove(8), 2);
                    }
                    block = block.Remove(0, 8);
                    j++;
                }
                var g = NumberOfCorrectionBytes;
                if (bytes.Length > NumberOfCorrectionBytes)
                {
                    g = bytes.Length;
                }
                int[] BArray = new int[g];
                for (j = 0; j < bytes.Length; j++)
                {
                    BArray[j] = bytes[j];
                }
                int[] arrayOfCorrectionBytes = AllDictionaries.PolynomialDict(NumberOfCorrectionBytes);
                //foreach (var item in arrayOfCorrectionBytes)
                //    Console.Write(item + " ");
                // Console.WriteLine();
                // foreach (var item in BArray)
                //    Console.Write(item + " ");
                // Console.WriteLine();



                for (int h = 0; h < bytes.Length; h++)
                {
                    int firstItem;
                    if (BArray[0] == 255)
                    {
                        firstItem = int.Parse(File.ReadLines("ReverseTable.txt").ElementAt(1));
                    }
                    else
                    {
                        firstItem = int.Parse(File.ReadLines("ReverseTable.txt").ElementAt(BArray[0]));
                    }


                    for (int b = 0; b < g - 1; b++)

                    {
                        BArray[b] = BArray[b + 1];
                    }
                    BArray[g - 1] = 0;
                    if (firstItem == -1)
                    {
                        continue;
                    }
                    // foreach (var item in BArray)
                    //    Console.Write(item + " ");
                    // Console.WriteLine(firstIte
                    var B = 0;
                    for (int b = 0; b < NumberOfCorrectionBytes; b++)
                    {
                        B = arrayOfCorrectionBytes[b] + firstItem;
                        if (B > 254)
                        {
                            B = B % 255;
                        }
                        B         = int.Parse(File.ReadLines("Table.txt").ElementAt(B));
                        B         = B ^ BArray[b];
                        BArray[b] = B;
                        //if (arrayOfCorrectionBytes[b] == 0)
                        //    arrayOfCorrectionBytes[b] = 255;
                        // Console.WriteLine(arrayOfCorrectionBytes[b] + " ");

                        //Console.WriteLine(arrayOfCorrectionBytes[b]);
                        //arrayOfCorrectionBytes[b] = int.Parse(File.ReadLines("Table.txt").ElementAt(arrayOfCorrectionBytes[b]));
                        //Console.WriteLine(arrayOfCorrectionBytes[b]);

                        //Console.WriteLine($"{arrayOfCorrectionBytes[b]} {BArray[b]} {arrayOfCorrectionBytes[b] ^ BArray[b]} ");
                        //arrayOfCorrectionBytes[b] = arrayOfCorrectionBytes[b] ^ BArray[b];
                        //Console.WriteLine(arrayOfCorrectionBytes[b]);
                    }
                }
                for (var item = 0; item < NumberOfCorrectionBytes; item++)
                {
                    var f = Convert.ToString(BArray[item], 2);
                    f = f.PadLeft(8, '0');

                    ArrayCorrectionBytes[nb, item] = f;
                }
                //for (var item = 0; item < NumberOfCorrectionBytes; item++)
                //    Console.WriteLine(ArrayCorrectionBytes[nb, item]);
                data2 = data2.Remove(0, data2.IndexOf(' ') + 1);
                nb++;
            }
            data2 = data;
            data  = data.Insert(data.Length, " ");
            for (var i = 0; i < NumberOfBlocks; i++)
            {
                if (data[0] == ' ')
                {
                    data = data.Remove(0, 1);
                }
                var t = data.IndexOf(' ');
                for (var j = 0; j < t / 8; j++)
                {
                    if (data[0] == ' ')
                    {
                        data = data.Remove(0, 1);
                        break;
                    }
                    info[i, j] = data.Remove(8, data.Length - 8);
                    data       = data.Remove(0, 8);
                    //Console.WriteLine();
                    //Console.Write(info[i, j] + " ");
                }
                //Console.WriteLine();
            }
            var data3 = "";

            //Console.WriteLine();
            for (var i = 0; i < info.GetLength(1); i++)
            {
                for (var j = 0; j < info.GetLength(0); j++)
                {
                    if (info[j, i] == null)
                    {
                        continue;
                    }
                    data3 += info[j, i];
                }
            }

            for (var i = 0; i < ArrayCorrectionBytes.GetLength(1); i++)
            {
                for (var j = 0; j < ArrayCorrectionBytes.GetLength(0); j++)
                {
                    data3 += ArrayCorrectionBytes[j, i];
                }
            }

            return(data3);
        }
示例#3
0
        static string GenerateMatrix(int version, int correctionLevel, string data)
        {
            string d    = "";
            var    size = AllDictionaries.SizeDictionary(version - 1);

            int[,] matrix1           = new int[size, size];
            int[,] searchPatterns    = { { 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 1, 0, 1 }, { 1, 0, 1, 1, 1, 0, 1 }, { 1, 0, 1, 1, 1, 0, 1 }, { 1, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1 } };
            int[,] alignmentPatterns = { { 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 1, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 } };
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    matrix1[i, j] = searchPatterns[i, j];
                }
            }
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    matrix1[i + size - 7, j] = searchPatterns[i, j];
                }
            }
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    matrix1[i, j + size - 7] = searchPatterns[i, j];
                }
            }
            if (version == 1)
            {
            }
            else if (version < 7)
            {
                var alignmentPatternspos = int.Parse(File.ReadLines("alignmentPatternsPos.txt").ElementAt(version - 1));
                for (int i = 0; i < 5; i++)
                {
                    for (int j = 0; j < 5; j++)
                    {
                        matrix1[i + alignmentPatternspos - 2, j + alignmentPatternspos - 2] = alignmentPatterns[i, j];
                    }
                }
            }
            else
            {
                string[] alignmentPatternspos = File.ReadLines("alignmentPatternsPos.txt").ElementAt(version - 1).Split();
                for (int i = 0; i < alignmentPatternspos.Length; i++)
                {
                    for (int j = 0; j < alignmentPatternspos.Length; j++)
                    {
                        if ((i == 0 && j == alignmentPatternspos.Length - 1) || (i == 0 && j == 0) || (j == 0 && i == alignmentPatternspos.Length - 1))
                        {
                            continue;
                        }
                        else
                        {
                            int X     = int.Parse(alignmentPatternspos[j]);
                            int Y     = int.Parse(alignmentPatternspos[i]);
                            int check = 0;
                            for (int k = 0; k < 5; k++)
                            {
                                for (int g = 0; g < 5; g++)
                                {
                                    if (matrix1[k + X - 2, g + Y - 2] == 1)
                                    {
                                        check = 1;
                                        break;
                                    }
                                    matrix1[k + X - 2, g + Y - 2] = alignmentPatterns[k, g];
                                }
                                if (check == 1)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
                char[] versionCode = File.ReadLines("versionCode.txt").ElementAt(version - 1).ToCharArray();

                for (var i = 0; i < 3; i++)
                {
                    for (var j = 0; j < 6; j++)
                    {
                        if (Convert.ToInt32(versionCode[6 * i + j]) == 48)
                        {
                            matrix1[size - 11 + i, j] = 0;
                            matrix1[j, size - 11 + i] = 0;
                        }
                        else
                        {
                            matrix1[size - 11 + i, j] = 1;
                            matrix1[j, size - 11 + i] = 1;
                        }
                    }
                }
            }
            int l = 2;

            for (int i = 7; i < size - 7; i++)
            {
                if (l % 2 == 0)
                {
                    matrix1[i, 6] = 0;
                }
                else
                {
                    matrix1[i, 6] = 1;
                }
                l++;
            }
            for (int i = 8; i < size - 7; i++)
            {
                if (l % 2 == 0)
                {
                    matrix1[6, i] = 0;
                }
                else
                {
                    matrix1[6, i] = 1;
                }
                l++;
            }
            matrix1[8, size - 8] = 1;

            int[,] matrixResult = new int[size, size];
            int h;
            int gf;

            for (var maskCount = 0; maskCount <= 7; maskCount++) // data
            {
                h             = 0;
                gf            = 1;
                int[,] matrix = new int[size, size];
                Array.Copy(matrix1, matrix, size * size);

                for (var p = 0; p < 2; p++)
                {
                    for (var i = size - 1; i > 8; i--)
                    {
                        if (matrix[size - gf, i] == 1)
                        {
                            i -= 5;
                        }
                        matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                        h++;
                        matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                        h++;
                    }
                    gf += 2;

                    for (var i = 9; i < size; i++)
                    {
                        if (matrix[size - gf, i] == 1)
                        {
                            i += 5;
                        }
                        matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                        h++;
                        matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                        h++;
                    }
                    gf += 2;
                }
                for (var j = 0; j < (size - 17) / 4; j++)
                {
                    for (var i = size - 1; i >= 0; i--)
                    {
                        if (i == 6)
                        {
                            i -= 1;
                        }
                        if (version > 6 && i == 5 && gf == 9)
                        {
                            break;
                        }

                        if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 0)
                        {
                            matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                            h++;
                        }
                        else
                        {
                            if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1)
                            {
                                i -= 5;
                            }
                            matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                            h++;
                            matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                            h++;
                        }
                    }
                    gf += 2;

                    for (var i = 0; i < size; i++)
                    {
                        if (version > 6 && i < 6 && gf == 11)
                        {
                            matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                            h++;
                            continue;
                        }
                        if (i == 6)
                        {
                            i += 1;
                        }
                        if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 0)
                        {
                            matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                            h++;
                        }
                        else
                        {
                            if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1)
                            {
                                i += 5;
                            }
                            matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                            h++;
                            matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                            h++;
                        }
                    }
                    gf += 2;
                }

                for (var i = size - 9; i > 8; i--)
                {
                    if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1)
                    {
                        i -= 5;
                    }
                    matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                    h++;
                    matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                    h++;
                }
                gf += 3;
                bool ch = false;
                for (var p = 0; p < 2; p++)
                {
                    if (ch)
                    {
                        break;
                    }
                    for (var i = 9; i < size - 8; i++)
                    {
                        if (version > 6 && i >= size - 11)
                        {
                            break;
                        }
                        if (matrix[size - gf, i] == 1 && matrix[size - gf - 1, i] == 1)
                        {
                            i += 5;
                        }
                        matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                        if (h == data.Length - 1)
                        {
                            ch = true;
                            break;
                        }
                        h++;
                        matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                        if (h == data.Length - 1)
                        {
                            ch = true;
                            break;
                        }
                        h++;
                    }
                    gf += 2;
                    if (ch)
                    {
                        break;
                    }
                    for (var i = size - 9; i > 8; i--)
                    {
                        if (version > 6 && i >= size - 11)
                        {
                            continue;
                        }

                        matrix[size - gf, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf, i, maskCount);
                        if (h == data.Length - 1)
                        {
                            ch = true;
                            break;
                        }
                        h++;
                        matrix[size - gf - 1, i] = Masks(Convert.ToInt32(new string(data[h], 1)), size - gf - 1, i, maskCount);
                        if (h == data.Length - 1)
                        {
                            ch = true;
                            break;
                        }
                        h++;
                    }
                    gf += 2;
                }

                matrix = CodeMask(matrix, maskCount, correctionLevel);
                if (Points(matrixResult) > Points(matrix))
                {
                    for (int i = 0; i < size; i++)
                    {
                        for (int j = 0; j < size; j++)
                        {
                            matrixResult[i, j] = matrix[i, j];
                        }
                    }
                }
                ////Points(matrix);
            }

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < size + 8; j++)
                {
                    Console.Write("██");
                }
                Console.WriteLine();
            }
            for (int i = 0; i < size; i++)
            {
                Console.Write("████████");
                for (int j = 0; j < size; j++)
                {
                    if (matrixResult[j, i] == 0)
                    {
                        Console.Write("██");
                    }
                    else
                    {
                        Console.Write("  ");
                    }
                }
                Console.Write("████████");
                Console.WriteLine();
            }
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < size + 8; j++)
                {
                    Console.Write("██");
                }
                Console.WriteLine();
            }


            //matrix = matrix.
            return(d);
        }