git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/barcode/qr/errorcorrection.go (about)

     1  package qr
     2  
     3  import (
     4  	"git.sr.ht/~pingoo/stdx/barcode/utils"
     5  )
     6  
     7  type errorCorrection struct {
     8  	rs *utils.ReedSolomonEncoder
     9  }
    10  
    11  var ec = newErrorCorrection()
    12  
    13  func newErrorCorrection() *errorCorrection {
    14  	fld := utils.NewGaloisField(285, 256, 0)
    15  	return &errorCorrection{utils.NewReedSolomonEncoder(fld)}
    16  }
    17  
    18  func (ec *errorCorrection) calcECC(data []byte, eccCount byte) []byte {
    19  	dataInts := make([]int, len(data))
    20  	for i := 0; i < len(data); i++ {
    21  		dataInts[i] = int(data[i])
    22  	}
    23  	res := ec.rs.Encode(dataInts, int(eccCount))
    24  	result := make([]byte, len(res))
    25  	for i := 0; i < len(res); i++ {
    26  		result[i] = byte(res[i])
    27  	}
    28  	return result
    29  }