1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Package codabar can create Codabar barcodes
- package codabar
- import (
- "fmt"
- "regexp"
- "github.com/boombuler/barcode"
- "github.com/boombuler/barcode/utils"
- )
- var encodingTable = 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, true, true, false, true, true},
- 'A': []bool{true, false, true, true, false, false, true, false, false, true},
- 'B': []bool{true, false, false, true, false, false, true, false, true, true},
- 'C': []bool{true, false, true, false, false, true, false, false, true, true},
- 'D': []bool{true, false, true, false, false, true, true, false, false, true},
- }
- // Encode creates a codabar barcode for the given content
- 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)
- }
- resBits.AddBit(encodingTable[r]...)
- }
- return utils.New1DCode(barcode.TypeCodabar, content, resBits), nil
- }
|