1
2 package codabar
3
4 import (
5 "fmt"
6 "regexp"
7
8 "github.com/boombuler/barcode"
9 "github.com/boombuler/barcode/utils"
10 )
11
12 var encodingTable = map[rune][]bool{
13 '0': []bool{true, false, true, false, true, false, false, true, true},
14 '1': []bool{true, false, true, false, true, true, false, false, true},
15 '2': []bool{true, false, true, false, false, true, false, true, true},
16 '3': []bool{true, true, false, false, true, false, true, false, true},
17 '4': []bool{true, false, true, true, false, true, false, false, true},
18 '5': []bool{true, true, false, true, false, true, false, false, true},
19 '6': []bool{true, false, false, true, false, true, false, true, true},
20 '7': []bool{true, false, false, true, false, true, true, false, true},
21 '8': []bool{true, false, false, true, true, false, true, false, true},
22 '9': []bool{true, true, false, true, false, false, true, false, true},
23 '-': []bool{true, false, true, false, false, true, true, false, true},
24 '$': []bool{true, false, true, true, false, false, true, false, true},
25 ':': []bool{true, true, false, true, false, true, true, false, true, true},
26 '/': []bool{true, true, false, true, true, false, true, false, true, true},
27 '.': []bool{true, true, false, true, true, false, true, true, false, true},
28 '+': []bool{true, false, true, true, false, true, true, false, true, true},
29 'A': []bool{true, false, true, true, false, false, true, false, false, true},
30 'B': []bool{true, false, false, true, false, false, true, false, true, true},
31 'C': []bool{true, false, true, false, false, true, false, false, true, true},
32 'D': []bool{true, false, true, false, false, true, true, false, false, true},
33 }
34
35
36 func Encode(content string) (barcode.Barcode, error) {
37 checkValid, _ := regexp.Compile(`[ABCD][0123456789\-\$\:/\.\+]*[ABCD]$`)
38 if content == "!" || checkValid.ReplaceAllString(content, "!") != "!" {
39 return nil, fmt.Errorf("can not encode \"%s\"", content)
40 }
41 resBits := new(utils.BitList)
42 for i, r := range content {
43 if i > 0 {
44 resBits.AddBit(false)
45 }
46 resBits.AddBit(encodingTable[r]...)
47 }
48 return utils.New1DCode(barcode.TypeCodabar, content, resBits), nil
49 }
50
View as plain text