public void testLookup() { EANManufacturerOrgSupport support = new EANManufacturerOrgSupport(); Assert.IsNull(support.lookupCountryIdentifier("472000")); Assert.AreEqual("US/CA", support.lookupCountryIdentifier("000000")); Assert.AreEqual("MO", support.lookupCountryIdentifier("958000")); Assert.AreEqual("GB", support.lookupCountryIdentifier("500000")); Assert.AreEqual("GB", support.lookupCountryIdentifier("509000")); }
/// <summary> /// <p>Like <seealso cref="#decodeRow(int, BitArray, java.util.Map)"/>, but /// allows caller to inform method about where the UPC/EAN start pattern is /// found. This allows this to be computed once and reused across many implementations.</p> /// </summary> //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: public com.google.zxing.Result decodeRow(int rowNumber, com.google.zxing.common.BitArray row, int[] startGuardRange, java.util.Map<com.google.zxing.DecodeHintType,?> hints) throws com.google.zxing.NotFoundException, com.google.zxing.ChecksumException, com.google.zxing.FormatException public virtual Result decodeRow(int rowNumber, BitArray row, int[] startGuardRange, IDictionary <DecodeHintType, object> hints) { //ResultPointCallback resultPointCallback = hints == null ? null : (ResultPointCallback) hints[DecodeHintType.NEED_RESULT_POINT_CALLBACK]; ResultPointCallback resultPointCallback = null; if (hints != null && hints.ContainsKey(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) { resultPointCallback = (ResultPointCallback)hints[DecodeHintType.NEED_RESULT_POINT_CALLBACK]; } if (resultPointCallback != null) { resultPointCallback.foundPossibleResultPoint(new ResultPoint((startGuardRange[0] + startGuardRange[1]) / 2.0f, rowNumber)); } StringBuilder result = decodeRowStringBuffer; result.Length = 0; int endStart = decodeMiddle(row, startGuardRange, result); if (resultPointCallback != null) { resultPointCallback.foundPossibleResultPoint(new ResultPoint(endStart, rowNumber)); } int[] endRange = decodeEnd(row, endStart); if (resultPointCallback != null) { resultPointCallback.foundPossibleResultPoint(new ResultPoint((endRange[0] + endRange[1]) / 2.0f, rowNumber)); } // Make sure there is a quiet zone at least as big as the end pattern after the barcode. The // spec might want more whitespace, but in practice this is the maximum we can count on. int end = endRange[1]; int quietEnd = end + (end - endRange[0]); if (quietEnd >= row.Size || !row.isRange(end, quietEnd, false)) { throw NotFoundException.NotFoundInstance; } string resultString = result.ToString(); if (!checkChecksum(resultString)) { throw ChecksumException.ChecksumInstance; } float left = (float)(startGuardRange[1] + startGuardRange[0]) / 2.0f; float right = (float)(endRange[1] + endRange[0]) / 2.0f; BarcodeFormat format = BarcodeFormat; Result decodeResult = new Result(resultString, null, new ResultPoint[] { new ResultPoint(left, (float)rowNumber), new ResultPoint(right, (float)rowNumber) }, format); // no natural byte representation for these barcodes try { Result extensionResult = extensionReader.decodeRow(rowNumber, row, endRange[1]); decodeResult.putMetadata(ResultMetadataType.UPC_EAN_EXTENSION, extensionResult.Text); decodeResult.putAllMetadata(extensionResult.ResultMetadata); decodeResult.addResultPoints(extensionResult.ResultPoints); } catch (ReaderException re) { // continue } if (format == BarcodeFormat.EAN_13 || format == BarcodeFormat.UPC_A) { string countryID = eanManSupport.lookupCountryIdentifier(resultString); if (countryID != null) { decodeResult.putMetadata(ResultMetadataType.POSSIBLE_COUNTRY, countryID); } } return(decodeResult); }