summaryrefslogtreecommitdiff
path: root/fxbarcode/oned/BC_OnedEANChecksum.cpp
blob: b290c62926f5d096277c6577ca391ce6d2005378 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 ByteString& contents) {
  int32_t odd = 0;
  int32_t even = 0;
  size_t parity = 1;
  for (size_t 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;
}