/// <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); }
/// <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); }
/// <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()); }
/// <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; } } } }
/// <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!"); } }