unit test

This commit is contained in:
libin
2023-03-22 08:25:31 +08:00
parent 708c2166c6
commit 4b8442d00e
4 changed files with 120 additions and 121 deletions

View File

@@ -1,33 +1,40 @@
package validUtil package validUtil
import (
"regexp"
)
// IsBankCardNo 验证是否为大陆银行卡号 // IsBankCardNo 验证是否为大陆银行卡号
func IsBankCardNo(cardNo string) bool { func IsBankCardNo(cardNumber string) bool {
// 银行卡号长度为 16-19 位 if len(cardNumber) != 16 && len(cardNumber) != 19 {
if len(cardNo) < 16 || len(cardNo) > 19 {
return false return false
} }
var cardArr []int
// 银行卡号必须为数字 for _, c := range cardNumber {
match, _ := regexp.MatchString("^[0-9]+$", cardNo) if c < '0' || c > '9' {
if !match {
return false return false
} }
cardArr = append(cardArr, int(c-'0'))
// 使用 Luhn 算法验证银行卡号的合法性 }
var sum int if len(cardArr) == 16 {
for i, c := range cardNo { sum := 0
num := int(c - '0') for i := len(cardArr) - 1; i >= 0; i-- {
if i%2 == 0 { if i%2 == 0 {
num *= 2 cardArr[i] *= 2
if num > 9 { if cardArr[i] > 9 {
num -= 9 cardArr[i] -= 9
} }
} }
sum += num sum += cardArr[i]
} }
return sum%10 == 0 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
}
} }

View File

@@ -1,39 +1,49 @@
package validUtil package validUtil
import "testing" import (
"testing"
)
// 测试IsBankCardNo函数
func TestIsBankCardNo(t *testing.T) { 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 { testCases := []struct {
name string name string
input string cardNum string
expected bool expected bool
}{ }{
{ {"case 1", "1234567890123456", false},
name: "valid bank card number with 15 digits", {"case 2", "6217000010081698261", true},
input: "123456789012345", {"case 3", "6227000010081698261", false},
expected: false, {"case 4", "621700001008169826", false},
}, {"case 5", "62170000100816982612", 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,
},
} }
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
result := IsBankCardNo(tc.input) result := IsBankCardNo(tc.cardNum)
if result != tc.expected { 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)
} }
}) })
} }

View File

@@ -23,20 +23,22 @@ func TestIsTime(t *testing.T) {
} }
func TestIsDate(t *testing.T) { func TestIsDate(t *testing.T) {
if !IsDate("2023-03-11") { testCases := []struct {
t.Error("Expected true, got false") 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") for _, testCase := range testCases {
result := IsDate(testCase.input)
if result != testCase.expected {
t.Errorf("IsDate(%v) = %v, expected %v", testCase.input, result, testCase.expected)
} }
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")
} }
} }

View File

@@ -1,61 +1,41 @@
package validUtil package validUtil
//import "testing" import "testing"
//
//func TestIsIDCard(t *testing.T) { func TestIsIDCard1(t *testing.T) {
// // 18位身份证号码测试 // 18位身份证号码测试
// cases18 := []struct { cases18 := []struct {
// input string input string
// want bool want bool
// }{ }{
// {"", false}, {"", false},
// {"123456789012345678", false}, {"123456789012345678", false},
// {"12345678901234567X", false}, {"12345678901234567X", false},
// {"12345678901234567x", false}, {"12345678901234567x", false},
// {"360313198909085215", true}, {"120103199001015953", true},
// {"36031319890908521x", true}, }
// {"36031319890908521X", true}, for _, c := range cases18 {
// {"110101198001010018", true}, got := IsIDCard(c.input)
// {"11010119800101001X", true}, if got != c.want {
// {"11010119800101001x", true}, t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
// {"320311770706001", false}, }
// {"32031119770706001X", false}, }
// {"360313198909285215", false}, }
// {"360313198909085211", false},
// {"360313198912345678", false}, func TestIsIDCard2(t *testing.T) {
// } // 15位身份证号码测试
// for _, c := range cases18 { cases15 := []struct {
// got := IsIDCard(c.input) input string
// if got != c.want { want bool
// t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want) }{
// } {"", false},
// } {"12345678901234", false},
// {"1234567890123X", false},
// // 15位身份证号码测试 }
// cases15 := []struct { for _, c := range cases15 {
// input string got := IsIDCard(c.input)
// want bool if got != c.want {
// }{ t.Errorf("IsIDCard(%q) == %v, want %v", c.input, got, c.want)
// {"", 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)
// }
// }
//}