Algorithm will detect any single-digit error, as well as almost all transpositions of adjacent digits. It will not, however, detect transposition of the two-digit sequence 09 to 90 (or vice versa).
It is not intended to be a cryptographically secure hash function. It is mostly used for pre-flight credit card number validation as specified in ISO/IEC 7812-1:2015
import "github.com/jancajthaml-go/luhn"
ok := luhn.Validate("00123014764700968325")
digit, error := luhn.Digit("x")
checksum := luhn.Generate("1")
BenchmarkLuhnSmall 200000000 13.9 ns/op 0 B/op 0 allocs/op
BenchmarkLuhnLarge 50000000 31.8 ns/op 0 B/op 0 allocs/op
BenchmarkLuhnSmallParallel 300000000 4.06 ns/op 0 B/op 0 allocs/op
BenchmarkLuhnLargeParallel 100000000 15.0 ns/op 0 B/op 0 allocs/op
verify your performance by running make benchmark