// 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") }
func Encode(content string) (barcode.Barcode, error) { contentRunes := strToRunes(content) if len(contentRunes) < 0 || len(contentRunes) > 80 { return nil, fmt.Errorf("content length should be between 1 and 80 runes but got %d", len(contentRunes)) } idxList := getCodeIndexList(contentRunes) if idxList == nil { return nil, fmt.Errorf("\"%s\" could not be encoded", content) } result := new(utils.BitList) sum := 0 for i, idx := range idxList.GetBytes() { if i == 0 { sum = int(idx) } else { sum += i * int(idx) } result.AddBit(encodingTable[idx]...) } result.AddBit(encodingTable[sum%103]...) result.AddBit(encodingTable[stopSymbol]...) return utils.New1DCode("Code 128", content, result), nil }
// Encode returns a code39 barcode for the given content // if includeChecksum is set to true, a checksum character is calculated and added to the content func Encode(content string, includeChecksum bool, fullASCIIMode bool) (barcode.Barcode, error) { if fullASCIIMode { var err error content, err = prepare(content) if err != nil { return nil, err } } else if strings.ContainsRune(content, '*') { return nil, errors.New("invalid data! try full ascii mode") } data := "*" + content if includeChecksum { data += getChecksum(content) } data += "*" result := new(utils.BitList) for i, r := range data { if i != 0 { result.AddBit(false) } info, ok := encodeTable[r] if !ok { return nil, errors.New("invalid data! try full ascii mode") } result.AddBit(info.data...) } return utils.New1DCode("Code 39", content, result), nil }
// Encode creates a codabar barcode for the given content func Encode(content string, interleaved bool) (barcode.Barcode, error) { if content == "" { return nil, errors.New("content is empty") } if interleaved && len(content)%2 == 1 { return nil, errors.New("can only encode even number of digits in interleaved mode") } mode := modes[interleaved] resBits := new(utils.BitList) resBits.AddBit(mode.start...) var lastRune *rune for _, r := range content { var a, b pattern if interleaved { if lastRune == nil { lastRune = new(rune) *lastRune = r continue } else { var o1, o2 bool a, o1 = encodingTable[*lastRune] b, o2 = encodingTable[r] if !o1 || !o2 { return nil, fmt.Errorf("can not encode \"%s\"", content) } lastRune = nil } } else { var ok bool a, ok = encodingTable[r] if !ok { return nil, fmt.Errorf("can not encode \"%s\"", content) } b = nonInterleavedSpace } for i := 0; i < patternWidth; i++ { for x := 0; x < mode.widths[a[i]]; x++ { resBits.AddBit(true) } for x := 0; x < mode.widths[b[i]]; x++ { resBits.AddBit(false) } } } resBits.AddBit(mode.end...) kindTxt := "" if interleaved { kindTxt = " (interleaved)" } return utils.New1DCode("2 of 5"+kindTxt, content, resBits, -1), nil }
// 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("Codabar", content, resBits), nil }