| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package codabar
- import (
- "fmt"
- "github.com/boombuler/barcode"
- "github.com/boombuler/barcode/utils"
- "regexp"
- )
- var encodingTable map[rune][]bool = map[rune][]bool{
- '0': []bool{true, false, true, false, true, false, false, true, true},
- '1': []bool{true, false, true, false, true, true, false, false, true},
- '2': []bool{true, false, true, false, false, true, false, true, true},
- '3': []bool{true, true, false, false, true, false, true, false, true},
- '4': []bool{true, false, true, true, false, true, false, false, true},
- '5': []bool{true, true, false, true, false, true, false, false, true},
- '6': []bool{true, false, false, true, false, true, false, true, true},
- '7': []bool{true, false, false, true, false, true, true, false, true},
- '8': []bool{true, false, false, true, true, false, true, false, true},
- '9': []bool{true, true, false, true, false, false, true, false, true},
- '-': []bool{true, false, true, false, false, true, true, false, true},
- '$': []bool{true, false, true, true, false, false, true, false, true},
- ':': []bool{true, true, false, true, false, true, true, false, true, true},
- '/': []bool{true, true, false, true, true, false, true, false, true, true},
- '.': []bool{true, true, false, true, true, false, true, true, false, true},
- '+': []bool{true, false, true, true, false, false, true, true, false, false, true, true},
- 'A': []bool{true, false, true, true, false, false, true, false, false, true},
- 'B': []bool{true, false, true, false, false, true, false, false, true, true},
- 'C': []bool{true, false, false, true, false, false, true, false, true, true},
- 'D': []bool{true, false, true, false, false, true, true, false, false, true},
- }
- func Encode(content string) (barcode.Barcode, error) {
- checkValid, _ := regexp.Compile(`[ABCD][0123456789\-\$\:/\.\+]*[ABCD]$`)
- if content == "!" || checkValid.ReplaceAllString(content, "!") != "!" {
- return nil, fmt.Errorf("can not encode \"%s\"", content)
- }
- resBits := new(utils.BitList)
- for i, r := range content {
- if i > 0 {
- resBits.AddBit(false)
- }
- bits, ok := encodingTable[r]
- if !ok {
- return nil, fmt.Errorf("can not encode \"%s\"", content)
- }
- for _, bit := range bits {
- resBits.AddBit(bit)
- }
- }
- return &codabarcode{resBits, content}, nil
- }
|