diff options
| author | Sean Owen <srowen@gmail.com> | 2015-11-11 02:05:36 +0300 |
|---|---|---|
| committer | Sean Owen <srowen@gmail.com> | 2015-11-11 12:37:13 +0300 |
| commit | 9910fcfaa9be4e3c81efe7febdb121d59baa07e9 (patch) | |
| tree | d4a99b512a225d485151be2f176559da4084ca73 /core/src | |
| parent | 7a9f8c002cf6b16379ac16cc71a268810aab4700 (diff) | |
| download | zxing-9910fcfaa9be4e3c81efe7febdb121d59baa07e9.tar.xz | |
Closes issue #496 : correct checksum for certain Code 39 inputs
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/main/java/com/google/zxing/oned/Code39Reader.java | 11 | ||||
| -rw-r--r-- | core/src/main/java/com/google/zxing/oned/Code39Writer.java | 4 |
2 files changed, 8 insertions, 7 deletions
diff --git a/core/src/main/java/com/google/zxing/oned/Code39Reader.java b/core/src/main/java/com/google/zxing/oned/Code39Reader.java index 76eee5717..6a9a7e10c 100644 --- a/core/src/main/java/com/google/zxing/oned/Code39Reader.java +++ b/core/src/main/java/com/google/zxing/oned/Code39Reader.java @@ -37,7 +37,8 @@ import java.util.Map; public final class Code39Reader extends OneDReader { static final String ALPHABET_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"; - private static final char[] ALPHABET = ALPHABET_STRING.toCharArray(); + // Note this lacks '*' compared to ALPHABET_STRING + private static final String CHECK_DIGIT_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"; /** * These represent the encodings of characters, as patterns of wide and narrow bars. @@ -52,7 +53,7 @@ public final class Code39Reader extends OneDReader { 0x0A8, 0x0A2, 0x08A, 0x02A // $-% }; - private static final int ASTERISK_ENCODING = CHARACTER_ENCODINGS[39]; + static final int ASTERISK_ENCODING = CHARACTER_ENCODINGS[39]; private final boolean usingCheckDigit; private final boolean extendedMode; @@ -144,9 +145,9 @@ public final class Code39Reader extends OneDReader { int max = result.length() - 1; int total = 0; for (int i = 0; i < max; i++) { - total += ALPHABET_STRING.indexOf(decodeRowResult.charAt(i)); + total += CHECK_DIGIT_STRING.indexOf(decodeRowResult.charAt(i)); } - if (result.charAt(max) != ALPHABET[total % 43]) { + if (result.charAt(max) != CHECK_DIGIT_STRING.charAt(total % 43)) { throw ChecksumException.getChecksumInstance(); } result.setLength(max); @@ -258,7 +259,7 @@ public final class Code39Reader extends OneDReader { private static char patternToChar(int pattern) throws NotFoundException { for (int i = 0; i < CHARACTER_ENCODINGS.length; i++) { if (CHARACTER_ENCODINGS[i] == pattern) { - return ALPHABET[i]; + return ALPHABET_STRING.charAt(i); } } throw NotFoundException.getNotFoundInstance(); diff --git a/core/src/main/java/com/google/zxing/oned/Code39Writer.java b/core/src/main/java/com/google/zxing/oned/Code39Writer.java index 8a498a0ab..0c1ad1cee 100644 --- a/core/src/main/java/com/google/zxing/oned/Code39Writer.java +++ b/core/src/main/java/com/google/zxing/oned/Code39Writer.java @@ -63,7 +63,7 @@ public final class Code39Writer extends OneDimensionalCodeWriter { } } boolean[] result = new boolean[codeWidth]; - toIntArray(Code39Reader.CHARACTER_ENCODINGS[39], widths); + toIntArray(Code39Reader.ASTERISK_ENCODING, widths); int pos = appendPattern(result, 0, widths, true); int[] narrowWhite = {1}; pos += appendPattern(result, pos, narrowWhite, false); @@ -74,7 +74,7 @@ public final class Code39Writer extends OneDimensionalCodeWriter { pos += appendPattern(result, pos, widths, true); pos += appendPattern(result, pos, narrowWhite, false); } - toIntArray(Code39Reader.CHARACTER_ENCODINGS[39], widths); + toIntArray(Code39Reader.ASTERISK_ENCODING, widths); appendPattern(result, pos, widths, true); return result; } |
