HuTool工具使用PhoneUtil、IdUtil、ReUtil等常用工具类

本章主要对项目开发过程中涉及的信息的有效性验证,例如电话号码、身份证号、社会信用代码,对身份敏感的数据需要脱敏等,常用的一些工具类的封装,涉及到的工具类如下: PhoneUtil:电话号码工具类 IdcardUtil:身份证相关工具类 IdUtil:ID生成器工具类 RandomUtil:随机工具类

本章主要对项目开发过程中涉及的信息的有效性验证,例如电话号码、身份证号、社会信用代码,对身份敏感的数据需要脱敏等,常用的一些工具类的封装,涉及到的工具类如下:

  • PhoneUtil:电话号码工具类

  • IdcardUtil:身份证相关工具类

  • IdUtil:ID生成器工具类

  • RandomUtil:随机工具类

  • ReUtil:正则相关工具类

  • ZipUtil:压缩工具类

  • CreditCodeUtil:统一社会信用代码(GB32100-2015)工具类

  • CoordinateUtil:坐标系转换相关工具类

  • DesensitizedUtil:脱敏工具类

详情可查询: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位 (数字或大写英文字母)

  2. 机构类别代码1位 (数字或大写英文字母)

  3. 登记管理机关行政区划码6位 (数字)

  4. 主体标识码(组织机构代码)9位 (数字或大写英文字母)

  5. 校验码1位 (数字或大写英文字母)

方法

功能

支持类型

原理

isCreditCode

是否是有效的统一社会信用代码

CharSequence

通过校验码来判断

isCreditCodeSimple

正则校验是否是统一社会信用代码(18位)

CharSequence

正则判断

randomCreditCode

获取一个随机的统一社会信用代码

CoordinateUtil:坐标系转换相关工具类

其里面主要针对 坐标系转换 的一些功能进行封装

这里的坐标系分为三种:(坐标系由经度与纬度构成)

  • WGS84坐标系:即地球坐标系,中国外谷歌地图

  • GCJ02坐标系:即火星坐标系,高德、腾讯、阿里等使用

  • BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。百度、搜狗等使用

方法

功能

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

Comment