summaryrefslogtreecommitdiff
path: root/vendor/github.com/boombuler/barcode/ean/encoder.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/boombuler/barcode/ean/encoder.go')
-rw-r--r--vendor/github.com/boombuler/barcode/ean/encoder.go187
1 files changed, 0 insertions, 187 deletions
diff --git a/vendor/github.com/boombuler/barcode/ean/encoder.go b/vendor/github.com/boombuler/barcode/ean/encoder.go
deleted file mode 100644
index d89294f..0000000
--- a/vendor/github.com/boombuler/barcode/ean/encoder.go
+++ /dev/null
@@ -1,187 +0,0 @@
-// Package ean can create EAN 8 and EAN 13 barcodes.
-package ean
-
-import (
- "errors"
-
- "github.com/boombuler/barcode"
- "github.com/boombuler/barcode/utils"
-)
-
-type encodedNumber struct {
- LeftOdd []bool
- LeftEven []bool
- Right []bool
- CheckSum []bool
-}
-
-var encoderTable = map[rune]encodedNumber{
- '0': encodedNumber{
- []bool{false, false, false, true, true, false, true},
- []bool{false, true, false, false, true, true, true},
- []bool{true, true, true, false, false, true, false},
- []bool{false, false, false, false, false, false},
- },
- '1': encodedNumber{
- []bool{false, false, true, true, false, false, true},
- []bool{false, true, true, false, false, true, true},
- []bool{true, true, false, false, true, true, false},
- []bool{false, false, true, false, true, true},
- },
- '2': encodedNumber{
- []bool{false, false, true, false, false, true, true},
- []bool{false, false, true, true, false, true, true},
- []bool{true, true, false, true, true, false, false},
- []bool{false, false, true, true, false, true},
- },
- '3': encodedNumber{
- []bool{false, true, true, true, true, false, true},
- []bool{false, true, false, false, false, false, true},
- []bool{true, false, false, false, false, true, false},
- []bool{false, false, true, true, true, false},
- },
- '4': encodedNumber{
- []bool{false, true, false, false, false, true, true},
- []bool{false, false, true, true, true, false, true},
- []bool{true, false, true, true, true, false, false},
- []bool{false, true, false, false, true, true},
- },
- '5': encodedNumber{
- []bool{false, true, true, false, false, false, true},
- []bool{false, true, true, true, false, false, true},
- []bool{true, false, false, true, true, true, false},
- []bool{false, true, true, false, false, true},
- },
- '6': encodedNumber{
- []bool{false, true, false, true, true, true, true},
- []bool{false, false, false, false, true, false, true},
- []bool{true, false, true, false, false, false, false},
- []bool{false, true, true, true, false, false},
- },
- '7': encodedNumber{
- []bool{false, true, true, true, false, true, true},
- []bool{false, false, true, false, false, false, true},
- []bool{true, false, false, false, true, false, false},
- []bool{false, true, false, true, false, true},
- },
- '8': encodedNumber{
- []bool{false, true, true, false, true, true, true},
- []bool{false, false, false, true, false, false, true},
- []bool{true, false, false, true, false, false, false},
- []bool{false, true, false, true, true, false},
- },
- '9': encodedNumber{
- []bool{false, false, false, true, false, true, true},
- []bool{false, false, true, false, true, true, true},
- []bool{true, true, true, false, true, false, false},
- []bool{false, true, true, false, true, false},
- },
-}
-
-func calcCheckNum(code string) rune {
- x3 := len(code) == 7
- sum := 0
- for _, r := range code {
- curNum := utils.RuneToInt(r)
- if curNum < 0 || curNum > 9 {
- return 'B'
- }
- if x3 {
- curNum = curNum * 3
- }
- x3 = !x3
- sum += curNum
- }
-
- return utils.IntToRune((10 - (sum % 10)) % 10)
-}
-
-func encodeEAN8(code string) *utils.BitList {
- result := new(utils.BitList)
- result.AddBit(true, false, true)
-
- for cpos, r := range code {
- num, ok := encoderTable[r]
- if !ok {
- return nil
- }
- var data []bool
- if cpos < 4 {
- data = num.LeftOdd
- } else {
- data = num.Right
- }
-
- if cpos == 4 {
- result.AddBit(false, true, false, true, false)
- }
- result.AddBit(data...)
- }
- result.AddBit(true, false, true)
-
- return result
-}
-
-func encodeEAN13(code string) *utils.BitList {
- result := new(utils.BitList)
- result.AddBit(true, false, true)
-
- var firstNum []bool
- for cpos, r := range code {
- num, ok := encoderTable[r]
- if !ok {
- return nil
- }
- if cpos == 0 {
- firstNum = num.CheckSum
- continue
- }
-
- var data []bool
- if cpos < 7 { // Left
- if firstNum[cpos-1] {
- data = num.LeftEven
- } else {
- data = num.LeftOdd
- }
- } else {
- data = num.Right
- }
-
- if cpos == 7 {
- result.AddBit(false, true, false, true, false)
- }
- result.AddBit(data...)
- }
- result.AddBit(true, false, true)
- return result
-}
-
-// Encode returns a EAN 8 or EAN 13 barcode for the given code
-func Encode(code string) (barcode.Barcode, error) {
- var checkSum int
- if len(code) == 7 || len(code) == 12 {
- code += string(calcCheckNum(code))
- checkSum = utils.RuneToInt(calcCheckNum(code))
- } else if len(code) == 8 || len(code) == 13 {
- check := code[0 : len(code)-1]
- check += string(calcCheckNum(check))
- if check != code {
- return nil, errors.New("checksum missmatch")
- }
- checkSum = utils.RuneToInt(rune(code[len(code)-1]))
- }
-
- if len(code) == 8 {
- result := encodeEAN8(code)
- if result != nil {
- return utils.New1DCode("EAN 8", code, result, checkSum), nil
- }
- } else if len(code) == 13 {
- result := encodeEAN13(code)
- if result != nil {
- return utils.New1DCode("EAN 13", code, result, checkSum), nil
- }
- }
- return nil, errors.New("invalid ean code data")
-}