校验码工具 - 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 参考 文档。