mirror of
https://github.com/jefferyjob/go-easy-utils.git
synced 2025-10-16 20:11:25 +08:00
unit test
This commit is contained in:
@@ -1,33 +1,40 @@
|
||||
package validUtil
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
)
|
||||
|
||||
// IsBankCardNo 验证是否为大陆银行卡号
|
||||
func IsBankCardNo(cardNo string) bool {
|
||||
// 银行卡号长度为 16-19 位
|
||||
if len(cardNo) < 16 || len(cardNo) > 19 {
|
||||
func IsBankCardNo(cardNumber string) bool {
|
||||
if len(cardNumber) != 16 && len(cardNumber) != 19 {
|
||||
return false
|
||||
}
|
||||
|
||||
// 银行卡号必须为数字
|
||||
match, _ := regexp.MatchString("^[0-9]+$", cardNo)
|
||||
if !match {
|
||||
return false
|
||||
}
|
||||
|
||||
// 使用 Luhn 算法验证银行卡号的合法性
|
||||
var sum int
|
||||
for i, c := range cardNo {
|
||||
num := int(c - '0')
|
||||
if i%2 == 0 {
|
||||
num *= 2
|
||||
if num > 9 {
|
||||
num -= 9
|
||||
}
|
||||
var cardArr []int
|
||||
for _, c := range cardNumber {
|
||||
if c < '0' || c > '9' {
|
||||
return false
|
||||
}
|
||||
sum += num
|
||||
cardArr = append(cardArr, int(c-'0'))
|
||||
}
|
||||
if len(cardArr) == 16 {
|
||||
sum := 0
|
||||
for i := len(cardArr) - 1; i >= 0; i-- {
|
||||
if i%2 == 0 {
|
||||
cardArr[i] *= 2
|
||||
if cardArr[i] > 9 {
|
||||
cardArr[i] -= 9
|
||||
}
|
||||
}
|
||||
sum += cardArr[i]
|
||||
}
|
||||
return sum%10 == 0
|
||||
} else {
|
||||
sum := 0
|
||||
for i := len(cardArr) - 1; i >= 0; i-- {
|
||||
if (len(cardArr)-i)%2 == 0 {
|
||||
cardArr[i] *= 2
|
||||
if cardArr[i] > 9 {
|
||||
cardArr[i] -= 9
|
||||
}
|
||||
}
|
||||
sum += cardArr[i]
|
||||
}
|
||||
return sum%10 == 0
|
||||
}
|
||||
return sum%10 == 0
|
||||
}
|
||||
|
@@ -1,39 +1,49 @@
|
||||
package validUtil
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// 测试IsBankCardNo函数
|
||||
func TestIsBankCardNo(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
cardNo string
|
||||
wantRes bool
|
||||
}{
|
||||
{"empty cardNo", "", false},
|
||||
{"less than 16 digits", "123456789012345", false},
|
||||
{"more than 19 digits", "12345678901234567890", false},
|
||||
{"contains non-numeric characters", "1234567a890123456", false},
|
||||
{"valid cardNo with 16 digits", "6222020123456789", true},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := IsBankCardNo(tt.cardNo)
|
||||
if got != tt.wantRes {
|
||||
t.Errorf("IsBankCardNo(%s) = %t, want %t", tt.cardNo, got, tt.wantRes)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
input string
|
||||
cardNum string
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
name: "valid bank card number with 15 digits",
|
||||
input: "123456789012345",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "invalid bank card number with less than 15 digits",
|
||||
input: "123456789012",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "invalid bank card number with more than 19 digits",
|
||||
input: "12345678901234567890",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "invalid bank card number with non-digit characters",
|
||||
input: "12345abc6789012345",
|
||||
expected: false,
|
||||
},
|
||||
{"case 1", "1234567890123456", false},
|
||||
{"case 2", "6217000010081698261", true},
|
||||
{"case 3", "6227000010081698261", false},
|
||||
{"case 4", "621700001008169826", false},
|
||||
{"case 5", "62170000100816982612", false},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
result := IsBankCardNo(tc.input)
|
||||
result := IsBankCardNo(tc.cardNum)
|
||||
if result != tc.expected {
|
||||
t.Errorf("input(%s) expected %v, but got %v", tc.input, tc.expected, result)
|
||||
t.Errorf("expected %v, but got %v", tc.expected, result)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@@ -23,20 +23,22 @@ func TestIsTime(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestIsDate(t *testing.T) {
|
||||
if !IsDate("2023-03-11") {
|
||||
t.Error("Expected true, got false")
|
||||
testCases := []struct {
|
||||
input string
|
||||
expected bool
|
||||
}{
|
||||
{"2021-01-01", true},
|
||||
{"2021/01/01", false},
|
||||
{"2021-13-01", false},
|
||||
{"2021-02-29", false},
|
||||
{"2020-02-29", true},
|
||||
}
|
||||
if IsDate("2023-02-29") {
|
||||
t.Error("Expected false, got true")
|
||||
}
|
||||
if IsDate("2023-04-31") {
|
||||
t.Error("Expected false, got true")
|
||||
}
|
||||
if IsDate("2023-13-01") {
|
||||
t.Error("Expected false, got true")
|
||||
}
|
||||
if IsDate("2023-03-11 12:34:56") {
|
||||
t.Error("Expected false, got true")
|
||||
|
||||
for _, testCase := range testCases {
|
||||
result := IsDate(testCase.input)
|
||||
if result != testCase.expected {
|
||||
t.Errorf("IsDate(%v) = %v, expected %v", testCase.input, result, testCase.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,61 +1,41 @@
|
||||
package validUtil
|
||||
|
||||
//import "testing"
|
||||
//
|
||||
//func TestIsIDCard(t *testing.T) {
|
||||
// // 18位身份证号码测试
|
||||
// cases18 := []struct {
|
||||
// input string
|
||||
// want bool
|
||||
// }{
|
||||
// {"", false},
|
||||
// {"123456789012345678", false},
|
||||
// {"12345678901234567X", false},
|
||||
// {"12345678901234567x", false},
|
||||
// {"360313198909085215", true},
|
||||
// {"36031319890908521x", true},
|
||||
// {"36031319890908521X", true},
|
||||
// {"110101198001010018", true},
|
||||
// {"11010119800101001X", true},
|
||||
// {"11010119800101001x", true},
|
||||
// {"320311770706001", false},
|
||||
// {"32031119770706001X", false},
|
||||
// {"360313198909285215", false},
|
||||
// {"360313198909085211", false},
|
||||
// {"360313198912345678", false},
|
||||
// }
|
||||
// for _, c := range cases18 {
|
||||
// got := IsIDCard(c.input)
|
||||
// if got != c.want {
|
||||
// t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 15位身份证号码测试
|
||||
// cases15 := []struct {
|
||||
// input string
|
||||
// want bool
|
||||
// }{
|
||||
// {"", false},
|
||||
// {"12345678901234", false},
|
||||
// {"1234567890123X", false},
|
||||
// {"1234567890123x", false},
|
||||
// {"320311770706001", true},
|
||||
// {"330782820506908", true},
|
||||
// {"620321871001001", true},
|
||||
// {"622922780623068", true},
|
||||
// {"632523830310017", true},
|
||||
// {"130283820529063", true},
|
||||
// {"340702800818200", true},
|
||||
// {"110000400101001", true},
|
||||
// {"110000500101001", false},
|
||||
// {"110000200101001", false},
|
||||
// {"110000700101001", false},
|
||||
// }
|
||||
// for _, c := range cases15 {
|
||||
// got := IsIDCard(c.input)
|
||||
// if got != c.want {
|
||||
// t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
import "testing"
|
||||
|
||||
func TestIsIDCard1(t *testing.T) {
|
||||
// 18位身份证号码测试
|
||||
cases18 := []struct {
|
||||
input string
|
||||
want bool
|
||||
}{
|
||||
{"", false},
|
||||
{"123456789012345678", false},
|
||||
{"12345678901234567X", false},
|
||||
{"12345678901234567x", false},
|
||||
{"120103199001015953", true},
|
||||
}
|
||||
for _, c := range cases18 {
|
||||
got := IsIDCard(c.input)
|
||||
if got != c.want {
|
||||
t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsIDCard2(t *testing.T) {
|
||||
// 15位身份证号码测试
|
||||
cases15 := []struct {
|
||||
input string
|
||||
want bool
|
||||
}{
|
||||
{"", false},
|
||||
{"12345678901234", false},
|
||||
{"1234567890123X", false},
|
||||
}
|
||||
for _, c := range cases15 {
|
||||
got := IsIDCard(c.input)
|
||||
if got != c.want {
|
||||
t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user