本章主要对项目开发过程中涉及的信息的有效性验证,例如电话号码、身份证号、社会信用代码,对身份敏感的数据需要脱敏等,常用的一些工具类的封装,涉及到的工具类如下:
详情可查询:API 文档
PhoneUtil:电话号码工具类
方法 | 功能 | 原理 |
---|
isMobile isMobileHk isMobileTw isMobileMo | 验证是否为手机号码(中国) 验证是否为手机号码(香港) 验证是否为手机号码(台湾) 验证是否为手机号码(澳门) | 正则匹配 |
isTel isTel400800 | 验证是否为座机号码(中国) 验证是否为座机号码(中国)+ 400 + 800 | 正则匹配 |
hideBefore hideBetween hideAfter | 隐藏手机号前7位 替换字符为"*“ 隐藏手机号中间4位 替换字符为”*“ 隐藏手机号最后4位 替换字符为”*" | substring |
subBefore subBetween subAfter subTelBefore subTelAfter | 获取手机号前3位 获取手机号中间4位 获取手机号后4位 获取固话号码中的区号 获取固话号码中的号码 | substring |
isPhone | 验证是否为座机号码+手机号码(CharUtil中国)+ 400 + 800电话 + 手机号号码(香港) | |
IdcardUtil:身份证相关工具类
方法 | 功能 | 支持类型 | 原理 |
---|
isValidCard isValidCard18 isValidCard18 isValidCard15 isValidCard10 isValidTWCard isValidHKCard | 是否有效身份证号,忽略X的大小写(18位 / 15位 / 10位) 判断18位身份证的合法性,可选择是否忽略大小写,默认忽略 验证15位身份编码是否合法 验证10位身份编码是否合法 验证台湾身份证号码 验证香港身份证号码(部分特殊身份证无法检查) | String | substring 分别判断 |
getBirthByIdCard getBirth getBirthDate getAgeByIdCard getAgeByIdCard getYearByIdCard getMonthByIdCard getDayByIdCard getGenderByIdCard getProvinceCodeByIdCard getProvinceByIdCard getCityCodeByIdCard getDistrictCodeByIdCard | 根据身份编号获取指定信息,例如生日、年龄、性别,只支持15或18位身份证号码 | String | substring |
convert15To18 | 将15位身份证号码转换为18位 | String | substring |
hide | 隐藏指定位置的身份证号数字为“*” | String | substring |
getIdcardInfo | 获取身份证信息,包括身份、城市代码、生日、性别等 | String | |
getCheckCode18 | 将power和值与11取模获得余数进行校验码判断 获得18位身份证校验码 | int String | |
getPowerSum | 将身份证的每位和对应位的加权因子相乘之后,再得到和值 | Class | |
IdUtil:ID生成器工具类
其里面主要针对 全局唯一Id 或 ID
的一些功能进行实现
具体传参与返回值可查看接口文档,这里仅总览出常用的功能方法
方法 | 功能 | 原理 |
---|
randomUUID simpleUUID | 获取随机UUID 简化的UUID,去掉了横线 | UUID.randomUUID() |
fastUUID fastSimpleUUID | 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID | UUID.randomUUID() |
getSnowflake | 获取单例的Twitter的Snowflake 算法生成器对象,用于生成全局唯一ID,ID按照时间有序生成 | |
getDataCenterId getWorkerId | 获取数据中心ID(数据中心ID依赖于本地网卡MAC地址) 获取机器ID,使用进程ID配合数据中心ID生成(机器依赖于本进程ID或进程名的Hash值) | |
objectId | 创建MongoDB ID生成策略实现 | |
nanoId | 获取随机NanoId(NanoId是一个小型、安全、对 URL友好的唯一字符串 ID 生成器) | |
getSnowflakeNextId getSnowflakeNextIdStr | 简单获取 Snowflake 的 nextId | |
RandomUtil:随机元素相关工具类
方法 | 功能 | 支持类型 | 原理 |
---|
getRandom getSecureRandom getSHA1PRNGRandom getSecureRandomStrong | 获取随机数产生器 获取SHA1PRNG的 SecureRandom,类提供加密的强随机数生成器 获取SHA1PRNG的 SecureRandom,类提供加密的强随机数生成器 获取algorithms/providers中提供的强安全随机生成器 | | |
createSecureRandom | 创建 SecureRandom,类提供加密的强随机数生成器 | | |
randomBoolean randomChinese randomInt randomInts randomLong randomDouble randomBigDecimal randomBytes randomNumbers randomChar | 获得随机Boolean值 获得随机汉字 获得随机int值 获得随机int值数组 获得随机Long值,可指定范围 [0,limit) 获得随机Double值[0,1),可指定范围 获得指定范围内的随机数[0, 1),可指定范围 获得随机bytes 获得随机数字,0~9单个数字 随机字母或数字,小写,或者指定样本 | | 随机数生成器对象进行生成 |
randomEle randomEles randomEleList randomEleSet | 随机获得列表中的元素 随机获得列表中的一定量元素(可能获取重复位置的元素) 随机获得列表中的一定量的元素(不会获取重复位置的元素) 随机获得列表中的一定量的不重复元素,返回Set | List / T | 先随机生成下标,再获取即可 |
randomString randomStringUpper randomStringWithoutStr | 获得一个随机的字符串(只包含数字和字符) 获得一个随机的字符串(只包含数字和大写字符) 获得一个随机的字符串(只包含数字和小写字母) 并排除指定字符串 | | |
weightRandom | 生成带有权重的随机生成器 | | |
randomDay randomDate | 以当天为基准,随机产生一个日期 以给定日期为基准,随机产生一个日期 | | |
ReUtil:正则相关工具类
方法 | 功能 | 支持类型 | 原理 |
---|
get getGroup0 getGroup1 getAllGroups getAllGroupNames | 获取匹配的字符串 获得正则中分组0的内容 获得正则中分组1的内容 获得匹配的字符串匹配到的所有分组 根据给定正则查找字符串中的匹配项,返回所有匹配的分组名对应分组值 | CharSequence | Pattern.matcher |
extractMulti extractMultiAndDelPre | 从content中匹配出多个值并根据template生成新的字符串 从content中匹配出多个值并根据template生成新的字符串,匹配结束后会删除匹配内容之前的内容(包括匹配内容) 例子:content 2013年5月 pattern (.*?)年(.*?)月 template:$1-$2 return 2013-5 | CharSequence | Pattern.matcher、String.replace |
findAll findAllGroup0 findAllGroup1 | 取得内容中匹配的所有结果 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容 取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容 | CharSequence | Pattern.matcher |
delFirst replaceFirst delLast delAll delPre replaceAll | 删除匹配的第一个内容 替换匹配的第一个内容 删除匹配的最后一个内容 删除匹配的全部内容 删除正则匹配到的内容之前的字符 如果没有找到,则返回原文 正则替换指定值 | CharSequence | Pattern.matcher、String.replace |
count indexOf lastIndexOf | 计算指定字符串中,匹配pattern的个数 找到指定正则匹配到字符串的开始位置 找到指定正则匹配到第一个字符串的位置 | CharSequence | Pattern.matcher |
contains isMatch | 指定内容中是否有表达式匹配的内容 给定内容是否匹配正则 | CharSequence | Pattern.matcher |
getFirstNumber | 从字符串中获得第一个整数 | CharSequence | Pattern.matcher |
escape | 转义字符,将正则的关键字转义 | CharSequence / char | Pattern.matcher |
ZipUtil:压缩工具类
方法 | 功能 | 支持类型 | 原理 |
---|
zip unzip | 打包,可指定打包源目录(默认当前目录)、打包目的目录(默认当前目录)、可指定编码(默认编码UTF-8) 解压,可指定解压源目录(默认当前目录)、解压的目的目录(默认当前目录)、可指定编码(默认编码UTF-8) | String、File | io流操作 |
gzip unGzip | Gzip压缩处理 Gzip解压处理 | String、byte[]、File、InputStream | io流操作 |
zlib unZlib | Zlib压缩处理 Zlib解压缩处理 | String、byte[]、File、InputStream | io流操作 |
get getStream getZipOutputStream | 获取压缩包中的指定input文件流 获取指定 ZipEntry 的input流,用于读取这个entry的内容 获取output流 | File、ZipFile ZipFile OutputStream | io流操作 |
append | 在zip文件中添加新文件或目录 | Path | io流操作 |
read | 读取并处理Zip文件中的每一个 ZipEntry | ZipFile | io流操作 |
unzipFileBytes | 从Zip文件中提取指定的文件为bytes | File | io流操作 |
listFileNames | 获取Zip文件中指定目录下的所有文件名称,只显示文件,不显示目录 | ZipFile | io流操作 |
CreditCodeUtil:统一社会信用代码(GB32100-2015)工具类
其里面主要针对 统一社会信用代码
的一些功能进行封装
有效的统一社会信用代码:
登记管理部门代码1位 (数字或大写英文字母)
机构类别代码1位 (数字或大写英文字母)
登记管理机关行政区划码6位 (数字)
主体标识码(组织机构代码)9位 (数字或大写英文字母)
校验码1位 (数字或大写英文字母)
方法 | 功能 | 支持类型 | 原理 |
---|
isCreditCode | 是否是有效的统一社会信用代码 | CharSequence | 通过校验码来判断 |
isCreditCodeSimple | 正则校验是否是统一社会信用代码(18位) | CharSequence | 正则判断 |
randomCreditCode | 获取一个随机的统一社会信用代码 | | |
CoordinateUtil:坐标系转换相关工具类
其里面主要针对 坐标系转换
的一些功能进行封装
这里的坐标系分为三种:(坐标系由经度与纬度构成)
方法 | 功能 |
---|
outOfChina | 判断坐标是否在国外 |
wgs84ToGcj02 wgs84ToBd09 | WGS84 转换为 火星坐标系 (GCJ-02) WGS84 坐标转为 百度坐标系 (BD-09) 坐标 |
gcj02ToWgs84 gcj02ToBd09 | 火星坐标系 (GCJ-02) 转换为 WGS84 火星坐标系 (GCJ-02) 转换为百度坐标系 (BD-09) |
bd09ToGcj02 bd09toWgs84 | 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 百度坐标系 (BD-09) 与 WGS84 的转换 |
DesensitizedUtil:脱敏工具类
采用的默认脱敏策略为:
用户编号(userId):脱敏为 0
中文姓名(chineseName):脱敏只显示第一个汉字,例如 张三 脱敏为 张*
身份证号(idCardNum):脱敏成 前1位 和后2位,例如 50038420000301245X 为 5***************5X
固定电话(fixedPhone):脱敏成 前四位,后两位,例如 09157518479 为 0915*****79
手机号码(mobilePhone):脱敏成前三位,后4位,其他隐藏,例如 15330943972 为 153****3972
地址(address) :脱敏成只显示到地区,不显示详细地址,例如 北京市海淀区东风街道001号 为 北京市海淀区****
电子邮箱(email): 脱敏成邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,例如 dandan@gmail.com.cn 为d*****@gmail.com.cn
密码(password): 脱敏成 ,例如 1234567890 为 :*********
中国车牌(carLicense): 脱敏成车牌中间用*代替 例如 渝A10000 为 渝A1*********0
银行卡号(bankCard): 脱敏 银行卡号 例如 11011111222233333256 为 1101 **** **** **** 3256
方法 | 功能 | 支持类型 | 原理 |
---|
desensitized | 根据脱敏类型脱敏字符串,使用默认的脱敏策略, | CharSequence | XMLReader.parse |
userId | 脱敏 【用户id】不对外提供userId | Object | 序列化实现 |
chineseName | 脱敏【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李** | | |
idCardNum | 脱敏【身份证号】前1位 和后2位 | | |
fixedPhone | 脱敏【固定电话】前四位,后两位 | | |
mobilePhone | 脱敏 【手机号码】前三位,后4位,其他隐藏,比如135****2210 | | |
address | 脱敏【地址】只显示到地区,不显示详细地址,比如:北京市海淀区**** | | |
email | 脱敏【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com | | |
password | 脱敏【密码】密码的全部字符都用代替,比如:***** | | |
carLicense | 脱敏【中国车牌】车牌中间用*代替 | | |
bankCard | 脱敏 银行卡号 1101 **** **** **** 3256 | | |