diff --git a/BUILD.gn b/BUILD.gn
index d9e8d71..c7b86ea 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1952,6 +1952,7 @@
       "core/fxcrt/xml/cfx_xmlsyntaxparser_unittest.cpp",
       "fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp",
       "fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp",
+      "fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp",
       "fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp",
       "xfa/fde/cfde_texteditengine_unittest.cpp",
       "xfa/fgas/crt/cfgas_formatstring_unittest.cpp",
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index 3fcb1e8..c3becc1a 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -86,16 +86,16 @@
 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++;
   }
-  int32_t checksum = (odd * 3 + even) % 10;
-  checksum = (10 - checksum) % 10;
-  return checksum;
+  return (10 - (odd * 3 + even) % 10) % 10;
 }
 
 uint8_t* CBC_OnedEAN8Writer::EncodeWithHint(const CFX_ByteString& contents,
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp b/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
new file mode 100644
index 0000000..16a1df6
--- /dev/null
+++ b/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
@@ -0,0 +1,88 @@
+// 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_OnedEAN8Writer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+TEST(OnedEAN8WriterTest, Encode) {
+  CBC_OnedEAN8Writer writer;
+  int32_t width;
+  int32_t height;
+  uint8_t* encoded;
+  const char* expected;
+
+  // EAN-8 barcodes encode 8-digit numbers into 67 modules in a unidimensional
+  // disposition.
+  encoded = writer.Encode("", BCFORMAT_EAN_8, width, height);
+  EXPECT_EQ(nullptr, encoded);
+  FX_Free(encoded);
+
+  encoded = writer.Encode("123", BCFORMAT_EAN_8, width, height);
+  EXPECT_EQ(nullptr, encoded);
+  FX_Free(encoded);
+
+  encoded = writer.Encode("1234567", BCFORMAT_EAN_8, width, height);
+  EXPECT_EQ(nullptr, encoded);
+  FX_Free(encoded);
+
+  encoded = writer.Encode("123456789", BCFORMAT_EAN_8, width, height);
+  EXPECT_EQ(nullptr, encoded);
+  FX_Free(encoded);
+
+  encoded = writer.Encode("12345670", BCFORMAT_EAN_8, width, height);
+  EXPECT_NE(nullptr, encoded);
+  EXPECT_EQ(1, height);
+  EXPECT_EQ(67, width);
+
+  expected =
+      "# #"      // Start
+      "  ##  #"  // 1 L
+      "  #  ##"  // 2 L
+      " #### #"  // 3 L
+      " #   ##"  // 4 L
+      " # # "    // Middle
+      "#  ### "  // 5 R
+      "# #    "  // 6 R
+      "#   #  "  // 7 R
+      "###  # "  // 0 R
+      "# #";     // End
+  for (int i = 0; i < 67; i++) {
+    EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
+  }
+  FX_Free(encoded);
+
+  encoded = writer.Encode("99441104", BCFORMAT_EAN_8, width, height);
+  EXPECT_NE(nullptr, encoded);
+  EXPECT_EQ(1, height);
+  EXPECT_EQ(67, width);
+
+  expected =
+      "# #"      // Start
+      "   # ##"  // 9 L
+      "   # ##"  // 9 L
+      " #   ##"  // 4 L
+      " #   ##"  // 4 L
+      " # # "    // Middle
+      "##  ## "  // 1 R
+      "##  ## "  // 1 R
+      "###  # "  // 0 R
+      "# ###  "  // 4 R
+      "# #";     // End
+  for (int i = 0; i < 67; i++) {
+    EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
+  }
+  FX_Free(encoded);
+}
+
+TEST(OnedEAN8WriterTest, Checksum) {
+  CBC_OnedEAN8Writer writer;
+  EXPECT_EQ(0, writer.CalcChecksum(""));
+  EXPECT_EQ(6, writer.CalcChecksum("123"));
+  EXPECT_EQ(0, writer.CalcChecksum("1234567"));
+  EXPECT_EQ(4, writer.CalcChecksum("9944110"));
+}
+
+}  // namespace
