Exemple #1
0
        /// <summary>
        /// Generuje liste losowych kodow
        /// </summary>
        /// <param name="howManyCodes"></param>
        /// <param name="codeType"></param>
        /// <returns></returns>
        public static List <CodeModel> GenerateListOfRandomCodes(int howManyCodes, EanCodeType codeType)
        {
            //tworzy instancje zwracanej listy
            List <CodeModel> outputCodeModelList = new List <CodeModel>();
            //inicjalizacja generatora liczb losowych
            Random rnd = new Random();

            //generuje zadana ilosc kodow
            for (int j = 0; j < howManyCodes; j++)
            {
                StringBuilder sb = new StringBuilder();
                //generuje kod o zadanej liczbie znakow
                for (int i = 0; i < (int)codeType; i++)
                {
                    sb.Append(rnd.Next(0, 9));
                }
                //tworzy instancje modelu kodu
                CodeModel codeModel = new CodeModel
                {
                    //wypelnia wyszystkie wlasciwosci obiektu
                    Code = sb.ToString(), IsLengthValid = true, IsCharValid = true
                };
                //dodaje obiekt do listy
                outputCodeModelList.Add(codeModel);
            }
            //zwraca liste kodow
            return(outputCodeModelList);
        }
Exemple #2
0
 /// <summary>
 /// Weryfikuj kod pod wzgledem jego dlugosci i dozwolonych w nim znakow i okresl poprawnosc kodu
 /// </summary>
 /// <param name="inputCodeModel"></param>
 /// <param name="inputCodeType"></param>
 /// <returns></returns>
 public static bool IsCodeValid(CodeModel inputCodeModel, EanCodeType inputCodeType)
 {
     //check if code length is valid and set property
     inputCodeModel.IsLengthValid = IsLengthValid(inputCodeModel.Code, (int)inputCodeType);
     //check if code chars are valid and set property
     inputCodeModel.IsCharValid = IsCharValid(inputCodeModel.Code);
     //return main state of validation
     return(inputCodeModel.IsCharValid && inputCodeModel.IsLengthValid);
 }
Exemple #3
0
 /// <summary>
 /// Wyswietla glowne menu wraz z informacja o liczbie wprowadzonych kodow
 /// </summary>
 /// <param name="howManyCodes"></param>
 /// <returns></returns>
 public static string LoadMenu(int howManyCodes, EanCodeType eanCodeType)
 {
     Console.WriteLine($"Number of {eanCodeType} codes: {howManyCodes}");
     Console.WriteLine("Press '1' Input code");
     Console.WriteLine("Press '2' Generate list of random codes");
     Console.WriteLine("Press '3' Load code list from file");
     Console.WriteLine("Press '4' Fix checksums");
     Console.WriteLine("Press '5' Print results");
     Console.WriteLine("Press 'q' to Exit");
     Console.Write("Choose option: ");
     return(Console.ReadLine());
 }
Exemple #4
0
 /// <summary>
 /// Naprawia kod numeryczny modyfikujac niepoprawna sume kontrolna
 /// </summary>
 /// <param name="codes"></param>
 /// <param name="codeType"></param>
 public static void FixChecksum(List <CodeModel> codeModelList, EanCodeType codeType)
 {
     if (codeModelList.Any())
     {
         foreach (var eanCode in codeModelList)
         {
             if (IsCodeValid(eanCode, codeType))
             {
                 StringBuilder sb = new StringBuilder(eanCode.Code);
                 sb[((int)codeType) - 1] = CalculateChecksum(eanCode.Code, codeType).ToString()[0];
                 eanCode.Code            = sb.ToString();
                 eanCode.IsLengthValid   = true;
                 eanCode.IsCharValid     = true;
             }
         }
     }
 }
Exemple #5
0
        /// <summary>
        /// Wyliczenie sumy kontrolnej
        /// </summary>
        /// <param name="inputCode"></param>
        /// <returns></returns>
        public static int CalculateChecksum(string inputCode, EanCodeType inputCodeLength)
        {
            //suma cyfr z pozycji nieparzystystych
            int sumOfOddNumber = 0;
            //suma cyfr z pozycji parzystystych
            int sumOfEvenNumber = 0;
            //wyliczona wartosc dla sumy kontrolnej
            int checkSumForEanCode = 0;

            for (int i = 0; i < inputCode.Length - 1; i++)
            {
                if (int.TryParse(inputCode[i].ToString(), out int result))
                {
                    if (((i + 1) % 2) == 0)
                    {
                        sumOfEvenNumber += result;
                    }
                    else
                    {
                        sumOfOddNumber += result;
                    }
                }
            }
            //wyliczenie sumy kontrolnej dla odp. kodu EAN.
            switch (inputCodeLength)
            {
            case EanCodeType.EAN8:
                checkSumForEanCode = ((10 - (sumOfOddNumber * 3 + sumOfEvenNumber) % 10));
                return(checkSumForEanCode == 10 ? 0 : checkSumForEanCode);

            case EanCodeType.EAN13:
                checkSumForEanCode = ((10 - (sumOfOddNumber + sumOfEvenNumber * 3) % 10));
                return(checkSumForEanCode == 10 ? 0 : checkSumForEanCode);

            default: throw new Exception("There is no such of code type!");
            }
        }