exercism/go/luhn/luhn.go
2022-08-24 14:28:45 +02:00

34 lines
575 B
Go

package luhn
import (
"unicode"
"strings"
)
// Valid checks a given number for validity according to Luhn's formula
func Valid(card string) bool {
sum := 0
card = strings.ReplaceAll(card, " ", "")
if len(card) <= 1 {
return false
}
for idx, char := range card {
if !unicode.IsDigit(char) {
return false
}
digit := int(char - '0')
if (len(card)-idx-1)%2 == 0 {
sum += digit
} else {
digit *= 2
if digit > 9 {
sum += digit - 9
} else {
sum += digit
}
}
}
return sum%10 == 0
}