public void TestEanCodes() { using (StreamReader sr = new StreamReader(SimpleTestPath)) { string currentLine; // currentLine will be null when the StreamReader reaches the end of file while ((currentLine = sr.ReadLine()) != null) { EanEicCode code = new EanEicCode(currentLine.Split(";".ToCharArray())[0]); CheckResultCode expectedResult = (CheckResultCode)Enum.Parse(typeof(CheckResultCode), currentLine.Split(";".ToCharArray())[1]); CheckResult res = _service.CheckCode(code); Assert.AreEqual(res.ResultCode, expectedResult); } } }
public CheckResult Post(EanEicCode code) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "POST"; request.ContentType = "application/json;charset=utf-8"; var encoding = new UTF8Encoding(); byte[] bytes = encoding.GetBytes(javaScriptSerializer.Serialize(code)); request.ContentLength = bytes.Length; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(bytes, 0, bytes.Length); } Stream responseStream = request.GetResponse().GetResponseStream(); StreamReader reader = new StreamReader(responseStream); return javaScriptSerializer.Deserialize<CheckResult>(reader.ReadToEnd()); }
public CheckResult CheckCode(EanEicCode code) { if (code == null || string.IsNullOrEmpty(code.Code)) { return new CheckResult(CheckResultCode.NoCodeSupplied); } //EAN prefix if (code.Code.Length >= 2 && code.Code.Substring(0, 2) == "85") { return ValidateEan(code); } //EIC prefix if (code.Code.Length >= 2 && code.Code.Substring(0, 2) == "27") { return ValidateEic(code); } //Prefix did not match return new CheckResult(CheckResultCode.CodePrefixInvalid); }
private CheckResult ValidateEic(EanEicCode code) { if (code.Code.Length != 16) { return new CheckResult(CheckResultCode.EicInvalidLength); } // EIC check character computation algorithm from page 32-33 from the https://www.entsoe.eu/Documents/EDI/Library/2015-0612_451-n%20EICCode_Data_exchange_implementation_guide_final.pdf IEnumerable<int> numericEncodingOfEic; try { //Step 1&2 numericEncodingOfEic = GetNumericEicEncoding(code.Code); } catch (InvalidCharacterInEic) { return new CheckResult(CheckResultCode.EicInvalidCharacter); } //Step 3&4 IEnumerable<int> weightedList = getWeightedListEic(numericEncodingOfEic.Take(15)); //Step 5 int sumOfWeights = weightedList.Sum(); //Step 6 int modulo37 = 36 - ((sumOfWeights - 1)%37); char checkChar = EncodeIntToChar(modulo37); if (checkChar == code.Code.Last()) { return new CheckResult(CheckResultCode.EicOk); } return new CheckResult(CheckResultCode.EicInvalidCheckCharacter); }
private static CheckResult ValidateEan(EanEicCode code) { if (code.Code.Length != 18) { return new CheckResult(CheckResultCode.EanInvalidLength); } // sum = EAN[0] * 3 + EAN[1] + EAN[2] * 3 + EAN[3] + ... + EAN[16] * 3 int sum = 0; for (int i = 0; i < 17; i++) { int digit = code.Code[i] - '0'; if (digit < 0 || digit > 9) { return new CheckResult(CheckResultCode.EanInvalidCharacter); } if (i%2 == 0) { sum += digit*3; } else { sum += digit; } } int lastDigit = code.Code[17] - '0'; int checkSum = Ceiling(sum, 10) - sum; if (lastDigit == checkSum) { return new CheckResult(CheckResultCode.EanOk); } return new CheckResult(CheckResultCode.EanInvalidCheckCharacter); }