校验码工具 - CheckUtil¶
由来¶
校验码广泛用于条形码、身份证号、银行卡号等场景,用于检测输入错误。CheckUtil 提供了 EAN/UPC 条形码校验位和 Verhoeff 校验位算法,以及常用的格式校验方法。
方法¶
EAN/UPC 校验位¶
from hutool import CheckUtil
# 计算校验位
CheckUtil.ean_digit('400599871650') # '2'
CheckUtil.ean_digit('1234567890123') # '1'
# 验证条形码
CheckUtil.verify_ean('4005998000007') # True
CheckUtil.verify_ean('4005998000000') # False
Verhoeff 校验位¶
Verhoeff 算法基于二面体群 D₅,可检测所有单字符错误和相邻换位错误,优于传统模 10 校验:
# 计算校验位
CheckUtil.verhoeff_digit('123456654321') # '9'
CheckUtil.verhoeff_digit('1') # '5'
# 验证
CheckUtil.verify_verhoeff('1234566543219') # True
CheckUtil.verify_verhoeff('1234566543210') # False
# 生成带校验位的 ID
CheckUtil.build_verhoeff_id('Foo', 1) # 'Foo00011'
CheckUtil.build_verhoeff_id('ORD', 123, length=6) # 'ORD000123...'
格式校验¶
# MAC 地址
CheckUtil.is_mac('00:1A:2B:3C:4D:5E') # True
CheckUtil.is_mac('00-1A-2B-3C-4D-5E') # True
CheckUtil.is_mac('invalid') # False
# 中文字符
CheckUtil.is_chinese('你好世界') # True
CheckUtil.is_chinese('你好world') # False
# 英文字母
CheckUtil.is_english('Hello') # True
CheckUtil.is_english('Hello123') # False
# 符号
CheckUtil.is_symbol('!@#$%') # True
CheckUtil.is_symbol('!@#abc') # False
# URL
CheckUtil.contains_url('visit https://example.com now') # True
CheckUtil.contains_url('no url here') # False
# 空白行
CheckUtil.is_blank_line(' ') # True
CheckUtil.is_blank_line('hello') # False
# QQ 号
CheckUtil.is_qq('123456789') # True(5-11 位,不以 0 开头)
CheckUtil.is_qq('01234') # False
# 日期时间
CheckUtil.is_date_time('2024-01-15 08:30:00') # True
CheckUtil.is_date_time('2024-13-01 00:00:00') # False
# 邮编
CheckUtil.is_post_code('100000') # True
CheckUtil.is_post_code('1234') # False
# 手机号
CheckUtil.is_phone_number('13812345678') # True
CheckUtil.is_phone_number('12345678') # False
# 银行卡号
CheckUtil.is_bank_card('6222021234567890123') # True
# 日期
CheckUtil.is_date('2024-01-15') # True
CheckUtil.is_date('2024/01/15') # True
# IP 地址
CheckUtil.is_ip('192.168.1.1') # True
CheckUtil.is_ip('::1') # True
# Unicode 字符
CheckUtil.is_unicode('\\u4e2d') # True
# DPD 校验位
CheckUtil.dpd_check_digit('12345') # 校验位
Validator 验证器¶
Validator 提供 is_* 判断和 validate_* 校验(失败抛 ValidateException)两套方法:
from hutool import Validator
# is_* 系列 — 返回 bool
Validator.is_email('test@example.com') # True
Validator.is_ipv4('192.168.1.1') # True
Validator.is_ipv6('::1') # True
Validator.is_url('https://example.com') # True
Validator.is_uuid('550e8400-e29b-41d4-a716-446655440000') # True
Validator.is_mobile('13812345678') # True
Validator.is_plate_number('京A12345') # True
Validator.is_car_vin('LSGJA52U7AH000001') # True
Validator.is_birthday('1990-01-15') # True
Validator.is_chinese_name('张三') # True
Validator.is_credit_code('91350100M000100Y43') # True
Validator.is_citizen_id('110101199001011234') # True
Validator.is_money('123.45') # True
Validator.is_general('hello_123') # True
Validator.is_general_with_chinese('你好abc') # True
Validator.is_word('Hello') # True
Validator.is_hex('FF00FF') # True
Validator.is_letter('abc') # True
Validator.is_number('123') # True
Validator.is_zip_code('100000') # True
Validator.is_between(5, 1, 10) # True
Validator.is_null(None) # True
Validator.is_not_null('abc') # True
Validator.is_empty([]) # True
Validator.is_not_empty([1]) # True
Validator.has_chinese('你好') # True
Validator.has_number('abc123') # True
validate_* 系列¶
# 校验通过返回 None,失败抛 ValidateException
Validator.validate_email('test@example.com') # None
Validator.validate_mobile('13812345678') # None
Validator.validate_not_empty('abc') # None
Validator.validate_not_null('abc') # None
Validator.validate_between(5, 1, 10) # None
Validator.validate_upper_case('ABC') # None
Validator.validate_lower_case('abc') # None
# 自定义错误信息
Validator.validate_email('invalid', '邮箱格式错误')
# 抛出 ValidateException: 邮箱格式错误
索引校验¶
# checkIndexLimit — 索引范围校验
CheckUtil.check_index_limit(5, 10) # True(5 < 10)
CheckUtil.check_index_limit(10, 10) # False(10 >= 10)
正则匹配校验¶
# validateMatchRegex — 正则匹配校验
Validator.validate_match_regex('abc123', r'^[a-z0-9]+$') # True
备注
更多方法请参阅 API 参考 文档。