36 lines
616 B
Go
36 lines
616 B
Go
package card
|
|
|
|
import "errors"
|
|
|
|
var (
|
|
ErrCardRequired = errors.New("card number is required")
|
|
ErrCardLength = errors.New("card number must contain exactly 16 digits")
|
|
ErrCardNumeric = errors.New("card number must contain only digits")
|
|
)
|
|
|
|
func Validate(number string) error {
|
|
if number == "" {
|
|
return ErrCardRequired
|
|
}
|
|
|
|
if len(number) != 16 {
|
|
return ErrCardLength
|
|
}
|
|
|
|
for _, char := range number {
|
|
if char < '0' || char > '9' {
|
|
return ErrCardNumeric
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func Mask(number string) string {
|
|
if Validate(number) != nil {
|
|
return ""
|
|
}
|
|
|
|
return number[:6] + "******" + number[12:]
|
|
}
|