34 lines
575 B
Go
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
|
|
}
|