有一个Person的Model,其中用到身份证及出生日期字段。模型其他字段的定义就是基本方法,没什么可讲的。只说说两个问题:
1.身份证号码是18位,最后一位即为校验码,在填入身份证的时候就需要经过两次验证:
第一个验证是身份证号码长度必须是18位。第二个验证时号码要经过校验,也就是第18位的值应该是前17位经过一定的算法所得。
2.出生日期字段在创建实例时自动获取。
定义了如下模型,因为太长,就只贴部分:
# coding=UTF-8
from django.db import models
from django.core.exceptions import ValidationError
def IDValidator(value):
#身份证号码验证
Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
Ti = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
sum = 0
value = value.upper()
if len(value) != 18:
raise ValueError('请输入18位身份证号码,您只输入了%s位' % len(value))
for i in range(17):
sum += int(value[i]) * Wi[i]
if Ti[sum%11] != value[17]:
raise Valu