给我一份python自动化测试身份证的测试用例
时间: 2023-11-01 19:52:51 浏览: 41
以下是一个简单的 Python 自动化测试身份证的测试用例:
```python
import unittest
class TestIDCard(unittest.TestCase):
def test_validate_id(self):
id1 = '110101199003074253' # valid ID
id2 = '11010119900307425X' # valid ID with X at the end
id3 = '11010119900307425A' # invalid ID with invalid character at the end
id4 = '11010119900307' # invalid ID with missing digits
self.assertTrue(validate_id(id1))
self.assertTrue(validate_id(id2))
self.assertFalse(validate_id(id3))
self.assertFalse(validate_id(id4))
def validate_id(id):
# Check if ID is 18 digits long
if len(id) != 18:
return False
# Check if first 17 digits are valid numbers
for i in range(17):
if not id[i].isdigit():
return False
# Check if last digit is a valid number or X
if id[17] != 'X' and not id[17].isdigit():
return False
# Check if birthdate is valid
year = int(id[6:10])
month = int(id[10:12])
day = int(id[12:14])
if month < 1 or month > 12 or day < 1 or day > 31:
return False
if month in [4,6,9,11] and day > 30:
return False
if month == 2 and day > 29:
return False
if month == 2 and day == 29 and (year % 4 != 0 or (year % 100 == 0 and year % 400 != 0)):
return False
# Check if checksum is valid
weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
checksum = sum([int(id[i]) * weight[i] for i in range(17)]) % 11
checkcode = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'}
if id[17] != checkcode[checksum]:
return False
return True
if __name__ == '__main__':
unittest.main()
```
该测试用例包括一个 `validate_id` 函数,用于验证身份证号码的有效性。`test_validate_id` 函数则测试了几个不同的身份证号码,包括一个有效的身份证号码、一个以 X 结尾的有效身份证号码,一个以 A 结尾的无效身份证号码以及一个缺少数字的无效身份证号码。如果 `validate_id` 函数可以正确地验证这些身份证号码,则测试用例会通过。