mirror of
https://github.com/jefferyjob/go-easy-utils.git
synced 2025-10-17 04:20:37 +08:00
unit test
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -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")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
Reference in New Issue
Block a user