From a0698547385e2aa355c9a3c40ffdf1e0c04d63a8 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 27 Aug 2016 22:08:55 +0200 Subject: Solve luhn --- go/luhn/luhn.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 go/luhn/luhn.go (limited to 'go/luhn/luhn.go') diff --git a/go/luhn/luhn.go b/go/luhn/luhn.go new file mode 100644 index 0000000..c8ba0ad --- /dev/null +++ b/go/luhn/luhn.go @@ -0,0 +1,42 @@ +package luhn + +import "unicode" + +func normalize(s string) string { + var r []rune + for _, v := range s { + if unicode.IsNumber(v) { + r = append(r, v) + } + } + return string(r) +} + +func chksum(s string) int { + var sum int + for i, v := range s { + n := int(v - '0') + if (len(s)-i)%2 == 0 { + n *= 2 + if n > 9 { + n -= 9 + } + } + sum += n + } + return sum +} + +func Valid(s string) bool { + s = normalize(s) + if len(s) == 0 { + return false + } + return chksum(s)%10 == 0 +} + +func AddCheck(s string) string { + sum := chksum(normalize(s + "0")) + n := (10 - sum%10) % 10 + return s + string('0'+n) +} -- cgit v1.2.3