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)); }
public bool TryAccess(string username, EanEicCode code) { int accessCount = _userAccessRepository.GetUserAccessCount(username, _timeWindow); // _userAccessRepository.RecordAccess(username, code); return(accessCount < _maxAccessCount); }
public bool TryGetOpm(EanEicCode code, out Opm opmForCode) { if (code == null) { opmForCode = null; return(false); } return(_repository.TryGetValue(code, out opmForCode)); }
public void AddAndCheck() { EanEicCode c1 = new EanEicCode("859182400123456789"); EanEicCode c2 = new EanEicCode("859182400123456789"); Assert.AreEqual(c1, c2); repository.TryAdd(new Opm(validCode)); // repository.TryGetOpm() }
public bool TryRemoveOpm(EanEicCode code) { if (code == null) { return(false); } Opm opm; return(_repository.TryRemove(code, out opm)); }
public OpmVerificationResult VerifyOpm(string codeString, string username) { EanEicCode code = new EanEicCode(codeString); if (UserAccessService.TryAccess(username, code)) { OpmVerificationResult result = VerifyOpm(code); return(result); } throw new UserAccessLimitViolationException(); }
private OpmVerificationResult Verify(EanEicCode code) { CheckResult codeValid = EanEicCheckerHttpClient.Post(code); if (codeValid.ResultCode != CheckResultCode.EanOk && codeValid.ResultCode != CheckResultCode.EicOk) { //TODO SP: what to do now - maybe better to just return 'false' throw new ArgumentException("The supplied code is not valid." + "\n" + codeValid.Description); } //OK, code is valid, try to find it in the OpmRepository Opm opmForCode; if (OpmRepository.TryGetOpm(code, out opmForCode)) { return new OpmVerificationResult(true); } return new OpmVerificationResult(false); }
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 bool TryGetOpm(EanEicCode code, out Opm opmForCode) { try { _log.Debug(m => m("Trying to fetch Opm code=[" + " code.ToString() " + "].")); tbl_duplicate_opms dbOpm = _dbContext.tbl_duplicate_opms.SingleOrDefault(o => o.tdo_ean.Equals(code.Code)); opmForCode = new Opm(new EanEicCode(dbOpm.tdo_ean)); _log.Debug("Opm code=[" + " code.ToString() " + "] found in repository."); return(true); } catch { opmForCode = null; _log.Error("Opm could not be fetched from repository. Exception thrown."); return(false); } }
public bool TryRemoveOpm(EanEicCode code) { try { _log.Debug("Removal of Opm code=[" + " code.ToString() " + "] started."); tbl_duplicate_opms entityToRemove = _dbContext.tbl_duplicate_opms.FirstOrDefault(opm => opm.tdo_ean.Equals(code.Code)); if (entityToRemove == null) { return(false); } _dbContext.tbl_duplicate_opms.Remove(entityToRemove); _dbContext.SaveChanges(); _log.Debug("Removal of Opm code=[" + " code.ToString() " + "] finished."); return(true); } catch { _log.Error("Removal of Opm failed with an exception."); return(false); } }
private OpmVerificationResult Verify(EanEicCode code) { CheckResult codeValid = EanEicCheckerHttpClient.Post(code); if (codeValid.ResultCode != CheckResultCode.EanOk && codeValid.ResultCode != CheckResultCode.EicOk) { throw new EanEicCodeInvalidException(); } //OK, code is valid, try to find the record in the OpmRepository Opm opmForCode; if (OpmRepository.TryGetOpm(code, out opmForCode)) { return(new OpmVerificationResult(true)); } return(new OpmVerificationResult(false)); }
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()); }
private OpmVerificationResult Verify(EanEicCode code) { CheckResult codeValid = EanEicCheckerHttpClient.Post(code); if (codeValid.ResultCode != CheckResultCode.EanOk && codeValid.ResultCode != CheckResultCode.EicOk) { //TODO SP: what to do now - maybe better to just return 'false' throw new ArgumentException("The supplied code is not valid." + "\n" + codeValid.Description); } //OK, code is valid, try to find it in the OpmRepository Opm opmForCode; if (OpmRepository.TryGetOpm(code, out opmForCode)) { return(new OpmVerificationResult(true)); } return(new OpmVerificationResult(false)); }
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 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)); }
public bool TryRemoveOpm(EanEicCode code) { Opm opm; return _repository.TryRemove(code, out opm); }
public bool TryGetOpm(EanEicCode code, out Opm opmForCode) { return _repository.TryGetValue(code, out opmForCode); }
public CheckResult Post(EanEicCode code) { return(_eanEicCheckService.CheckCode(code)); }
public bool TryGetOpm(EanEicCode code, out Opm opmForCode) { return(_repository.TryGetValue(code, out opmForCode)); }
public bool TryRemoveOpm(EanEicCode code) { Opm opm; return(_repository.TryRemove(code, out opm)); }
private OpmVerificationResult VerifyOpm(EanEicCode code) { return(Verify(code)); }
/// <summary> /// TODO SP: /// 1) this call needs to be parameterized with some token or user identification to limit # of cals per user /// a. what to do if the EAN/EIC is invalid /// b. what to do if the user has already queried system too many times /// 2) create service that will keep track of # calls to the API for a particular user /// </summary> /// <param name="codeString"></param> /// <returns></returns> public OpmVerificationResult VerifyOpm(string codeString) { EanEicCode code = new EanEicCode(codeString); return(Verify(code)); }
/// <summary> /// TODO SP: /// 1) this call needs to be parameterized with some token or user identification to limit # of cals per user /// a. what to do if the EAN/EIC is invalid /// b. what to do if the user has already queried system too many times /// 2) create service that will keep track of # calls to the API for a particular user /// </summary> /// <param name="codeString"></param> /// <returns></returns> public OpmVerificationResult VerifyOpm(string codeString) { EanEicCode code = new EanEicCode(codeString); return Verify(code); }
public Opm(EanEicCode code) { Code = code; }