summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrique Nakashima <hnakashima@chromium.org>2017-09-06 13:35:25 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-09-06 20:08:48 +0000
commit7840dd6925308c39f87d3a1d0ef9e8ddc197f696 (patch)
tree3e705415c21a8e2a076711c777b9d1b460acef4c
parent45061669500e6f4fe71972e0fb60065b02c255bf (diff)
downloadpdfium-7840dd6925308c39f87d3a1d0ef9e8ddc197f696.tar.xz
Unify checksum calculation of EAN-8 and EAN-13.
The algorithm is the same. Change-Id: Ia5713f6b1602aafac546047b8d398048d6532686 Reviewed-on: https://pdfium-review.googlesource.com/13290 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
-rw-r--r--BUILD.gn2
-rw-r--r--fxbarcode/oned/BC_OnedEAN13Writer.cpp15
-rw-r--r--fxbarcode/oned/BC_OnedEAN8Writer.cpp14
-rw-r--r--fxbarcode/oned/BC_OnedEANChecksum.cpp21
-rw-r--r--fxbarcode/oned/BC_OnedEANChecksum.h12
5 files changed, 40 insertions, 24 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 03285bf0ee..deaa706b8d 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1422,6 +1422,8 @@ if (pdf_enable_xfa) {
"fxbarcode/oned/BC_OnedEAN13Writer.h",
"fxbarcode/oned/BC_OnedEAN8Writer.cpp",
"fxbarcode/oned/BC_OnedEAN8Writer.h",
+ "fxbarcode/oned/BC_OnedEANChecksum.cpp",
+ "fxbarcode/oned/BC_OnedEANChecksum.h",
"fxbarcode/oned/BC_OnedUPCAWriter.cpp",
"fxbarcode/oned/BC_OnedUPCAWriter.h",
"fxbarcode/pdf417/BC_PDF417.cpp",
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index e7642de56d..2d9759b9eb 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -31,6 +31,7 @@
#include "core/fxge/cfx_defaultrenderdevice.h"
#include "fxbarcode/BC_Writer.h"
#include "fxbarcode/oned/BC_OneDimWriter.h"
+#include "fxbarcode/oned/BC_OnedEANChecksum.h"
namespace {
@@ -76,19 +77,9 @@ CFX_WideString CBC_OnedEAN13Writer::FilterContents(
}
return filtercontents;
}
+
int32_t CBC_OnedEAN13Writer::CalcChecksum(const CFX_ByteString& contents) {
- int32_t odd = 0;
- int32_t even = 0;
- FX_STRSIZE parity = 1;
- for (FX_STRSIZE i = contents.GetLength(); i > 0; i--) {
- if (parity % 2) {
- odd += FXSYS_DecimalCharToInt(contents[i - 1]);
- } else {
- even += FXSYS_DecimalCharToInt(contents[i - 1]);
- }
- parity++;
- }
- return (10 - (odd * 3 + even) % 10) % 10;
+ return EANCalcChecksum(contents);
}
uint8_t* CBC_OnedEAN13Writer::EncodeWithHint(const CFX_ByteString& contents,
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index c3becc1a43..d4d438fe04 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -32,6 +32,7 @@
#include "fxbarcode/BC_Writer.h"
#include "fxbarcode/common/BC_CommonBitMatrix.h"
#include "fxbarcode/oned/BC_OneDimWriter.h"
+#include "fxbarcode/oned/BC_OnedEANChecksum.h"
namespace {
@@ -84,18 +85,7 @@ CFX_WideString CBC_OnedEAN8Writer::FilterContents(
}
int32_t CBC_OnedEAN8Writer::CalcChecksum(const CFX_ByteString& contents) {
- int32_t odd = 0;
- int32_t even = 0;
- FX_STRSIZE parity = 1;
- for (FX_STRSIZE i = contents.GetLength(); i > 0; i--) {
- if (i % 2) {
- odd += FXSYS_DecimalCharToInt(contents[i - 1]);
- } else {
- even += FXSYS_DecimalCharToInt(contents[i - 1]);
- }
- parity++;
- }
- return (10 - (odd * 3 + even) % 10) % 10;
+ return EANCalcChecksum(contents);
}
uint8_t* CBC_OnedEAN8Writer::EncodeWithHint(const CFX_ByteString& contents,
diff --git a/fxbarcode/oned/BC_OnedEANChecksum.cpp b/fxbarcode/oned/BC_OnedEANChecksum.cpp
new file mode 100644
index 0000000000..744a60827e
--- /dev/null
+++ b/fxbarcode/oned/BC_OnedEANChecksum.cpp
@@ -0,0 +1,21 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "fxbarcode/oned/BC_OnedEANChecksum.h"
+
+#include "core/fxcrt/fx_extension.h"
+
+int32_t EANCalcChecksum(const CFX_ByteString& contents) {
+ int32_t odd = 0;
+ int32_t even = 0;
+ FX_STRSIZE parity = 1;
+ for (FX_STRSIZE i = contents.GetLength(); i > 0; i--) {
+ if (parity % 2)
+ odd += FXSYS_DecimalCharToInt(contents[i - 1]);
+ else
+ even += FXSYS_DecimalCharToInt(contents[i - 1]);
+ parity++;
+ }
+ return (10 - (odd * 3 + even) % 10) % 10;
+}
diff --git a/fxbarcode/oned/BC_OnedEANChecksum.h b/fxbarcode/oned/BC_OnedEANChecksum.h
new file mode 100644
index 0000000000..47d2d6bd91
--- /dev/null
+++ b/fxbarcode/oned/BC_OnedEANChecksum.h
@@ -0,0 +1,12 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef FXBARCODE_ONED_BC_ONEDEANCHECKSUM_H_
+#define FXBARCODE_ONED_BC_ONEDEANCHECKSUM_H_
+
+#include "core/fxcrt/fx_string.h"
+
+int32_t EANCalcChecksum(const CFX_ByteString& contents);
+
+#endif // FXBARCODE_ONED_BC_ONEDEANCHECKSUM_H_