当前位置:   article > 正文

Java - HuTool 使用 PhoneUtil、ReUtil等工具类(三)

reutil

Java - HuTool 使用 PhoneUtil、ReUtil等工具类(三)

本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我们会用到的工具类,就无需我们自己去封装了

以前我还自己去封装,emmm,我真的太傻了~,但是自己封装也不是不好,但是学会站在巨人的肩膀上,也非常有必要

下面就简单介绍一下 HuTool工具 与 其简单使用

相关链接:

HuTool 工具介绍

Hutool 是一个小而全的 Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,涵盖了Java开发开发中的方方面面

使用 Hutool 可节省开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug

该工具类主要对 文件、流、加密解密、转码、正则、线程、XML等 JDK方法进行封装,组成各种Util工具类,同时提供以下组件:

模块介绍
hutool-aopJDK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache简单缓存实现
hutool-core核心,包括Bean操作、日期、各种Util等
hutool-cron定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装
hutool-dbJDBC封装后的数据操作,基于ActiveRecord思想
hutool-dfa基于DFA模型的多关键字查找
hutool-extra扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
hutool-http基于HttpUrlConnection的Http客户端封装
hutool-log自动识别日志实现的日志门面
hutool-script脚本执行封装,例如Javascript
hutool-setting功能更强大的Setting配置文件和Properties封装
hutool-system系统参数调用封装(JVM信息等)
hutool-jsonJSON实现
hutool-captcha图片验证码实现
hutool-poi针对POI中Excel和Word的封装
hutool-socket基于Java的NIO和AIO的Socket封装
hutool-jwtJSON Web Token (JWT)封装实现

可根据需求对每个模块 单独引入,也可以通过引入hutool-all方式引入所有模块

HuTool工具使用

HuTool 工具 的API文档与官网把其能干的事情说的很详细了,下面主要是列举出工具类能干什么,方法有哪些,顺带可以提一下原理是啥,会用并且懂原理是最好的学习方式

1、导包

使用首先导包,在项目的 pom.xml 中加入以下内容:【Hutool 5.x 支持 JDK8+,JDK7 使用 Hutool 4.x版本】Maven中央库

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.0</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

若使用jar包,可去该 下载jar 网址下载hutool-all-X.X.X.jar即可

2、使用

本小节主要围绕着 hutool 提供的工具类/功能为小点进行说明,一部分的说明来自官方文档,一部分来自看的源码,这里的源码版本为对应5.8.0(若与您看的源码有所不同,请查看版本是否相同)

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

  • PhoneUtil:电话号码工具类
  • IdcardUtil:身份证相关工具类
  • IdUtil:ID生成器工具类
  • RandomUtil:随机工具类
  • ReUtil:正则相关工具类
  • ZipUtil:压缩工具类
  • CreditCodeUtil:统一社会信用代码(GB32100-2015)工具类
  • CoordinateUtil:坐标系转换相关工具类
  • DesensitizedUtil:脱敏工具类
2.1 PhoneUtil:电话号码工具类( 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电话 + 手机号号码(香港)
2.2 IdcardUtil:身份证相关工具类( API 文档

IdcardUtil 工具类主要完成对身份证的一些校验进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法

方法功能支持类型原理
isValidCard
isValidCard18
isValidCard18
isValidCard15
isValidCard10
isValidTWCard
isValidHKCard
是否有效身份证号,忽略X的大小写(18位 / 15位 / 10位)
判断18位身份证的合法性,可选择是否忽略大小写,默认忽略
验证15位身份编码是否合法
验证10位身份编码是否合法
验证台湾身份证号码
验证香港身份证号码(部分特殊身份证无法检查)
Stringsubstring 分别判断
getBirthByIdCard
getBirth
getBirthDate
getAgeByIdCard
getAgeByIdCard
getYearByIdCard
getMonthByIdCard
getDayByIdCard
getGenderByIdCard
getProvinceCodeByIdCard
getProvinceByIdCard
getCityCodeByIdCard
getDistrictCodeByIdCard
根据身份编号获取指定信息,例如生日、年龄、性别,只支持15或18位身份证号码Stringsubstring
convert15To18将15位身份证号码转换为18位Stringsubstring
hide隐藏指定位置的身份证号数字为“*”Stringsubstring
getIdcardInfo获取身份证信息,包括身份、城市代码、生日、性别等String
getCheckCode18将power和值与11取模获得余数进行校验码判断
获得18位身份证校验码
int
String
getPowerSum将身份证的每位和对应位的加权因子相乘之后,再得到和值Class
2.3 IdUtil:ID生成器工具类( API 文档

其里面主要针对 全局唯一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
2.4 RandomUtil:随机元素相关工具类( API 文档

其里面主要针对 随机元素 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法

方法功能支持类型原理
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
以当天为基准,随机产生一个日期
以给定日期为基准,随机产生一个日期
2.5 ReUtil:正则相关工具类( API 文档

其里面主要针对 正则表达式相关 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法

方法功能支持类型原理
get
getGroup0
getGroup1
getAllGroups
getAllGroupNames
获取匹配的字符串
获得正则中分组0的内容
获得正则中分组1的内容
获得匹配的字符串匹配到的所有分组
根据给定正则查找字符串中的匹配项,返回所有匹配的分组名对应分组值
CharSequencePattern.matcher
extractMulti
extractMultiAndDelPre
从content中匹配出多个值并根据template生成新的字符串
从content中匹配出多个值并根据template生成新的字符串,匹配结束后会删除匹配内容之前的内容(包括匹配内容)
例子:content 2013年5月 pattern (.*?)年(.*?)月 template: $1-$2 return 2013-5
CharSequencePattern.matcher、String.replace
findAll
findAllGroup0
findAllGroup1
取得内容中匹配的所有结果
取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组0的内容
取得内容中匹配的所有结果,获得匹配的所有结果中正则对应分组1的内容
CharSequencePattern.matcher
delFirst
replaceFirst
delLast
delAll
delPre
replaceAll
删除匹配的第一个内容
替换匹配的第一个内容
删除匹配的最后一个内容
删除匹配的全部内容
删除正则匹配到的内容之前的字符 如果没有找到,则返回原文
正则替换指定值
CharSequencePattern.matcher、String.replace
count
indexOf
lastIndexOf
计算指定字符串中,匹配pattern的个数
找到指定正则匹配到字符串的开始位置
找到指定正则匹配到第一个字符串的位置
CharSequencePattern.matcher
contains
isMatch
指定内容中是否有表达式匹配的内容
给定内容是否匹配正则
CharSequencePattern.matcher
getFirstNumber从字符串中获得第一个整数CharSequencePattern.matcher
escape转义字符,将正则的关键字转义CharSequence / charPattern.matcher
2.6 ZipUtil:压缩工具类( API 文档

其里面主要针对 文件压缩 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法

方法功能支持类型原理
zip
unzip
打包,可指定打包源目录(默认当前目录)、打包目的目录(默认当前目录)、可指定编码(默认编码UTF-8)
解压,可指定解压源目录(默认当前目录)、解压的目的目录(默认当前目录)、可指定编码(默认编码UTF-8)
String、Fileio流操作
gzip
unGzip
Gzip压缩处理
Gzip解压处理
String、byte[]、File、InputStreamio流操作
zlib
unZlib
Zlib压缩处理
Zlib解压缩处理
String、byte[]、File、InputStreamio流操作
get
getStream
getZipOutputStream
获取压缩包中的指定input文件流
获取指定 ZipEntry 的input流,用于读取这个entry的内容
获取output流
File、ZipFile
ZipFile
OutputStream
io流操作
append在zip文件中添加新文件或目录Pathio流操作
read读取并处理Zip文件中的每一个 ZipEntryZipFileio流操作
unzipFileBytes从Zip文件中提取指定的文件为bytesFileio流操作
listFileNames获取Zip文件中指定目录下的所有文件名称,只显示文件,不显示目录ZipFileio流操作
2.7 CreditCodeUtil:统一社会信用代码(GB32100-2015)工具类( API 文档

其里面主要针对 统一社会信用代码 的一些功能进行封装

有效的统一社会信用代码

  • 第一部分:登记管理部门代码1位 (数字或大写英文字母)
  • 第二部分:机构类别代码1位 (数字或大写英文字母)
  • 第三部分:登记管理机关行政区划码6位 (数字)
  • 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母)
  • 第五部分:校验码1位 (数字或大写英文字母)
方法功能支持类型原理
isCreditCode是否是有效的统一社会信用代码CharSequence通过校验码来判断
isCreditCodeSimple正则校验是否是统一社会信用代码(18位)CharSequence正则判断
randomCreditCode获取一个随机的统一社会信用代码
2.8 CoordinateUtil:坐标系转换相关工具类( API 文档

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

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

  • 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 的转换
2.9 DesensitizedUtil:脱敏工具类( API 文档

其里面主要针对 信息脱敏的 的一些功能进行封装,具体传参与返回值可查看接口文档,这里仅总览出可完成的功能方法

这里采用的默认脱敏策略为:

  • 用户编号(userId):脱敏为 0
  • 中文姓名(chineseName):脱敏只显示第一个汉字,例如 段正淳 脱敏为 段**
  • 身份证号(idCardNum):脱敏成 前1位 和后2位,例如 51343620000320711X 为 5***************1X
  • 固定电话(fixedPhone):脱敏成 前四位,后两位,例如 09157518479 为 0915*****79
  • 手机号码(mobilePhone):脱敏成前三位,后4位,其他隐藏,例如 18049531999 为 180****1999
  • 地址(address) :脱敏成只显示到地区,不显示详细地址,例如 北京市海淀区马连洼街道289号 为 北京市海淀区****
  • 电子邮箱(email): 脱敏成邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,例如 duandazhi-jack@gmail.com.cn 为d********@gmail.com.cn **
  • 密码(password): 脱敏成 *,例如 1234567890 为 :**********
  • 中国车牌(carLicense): 脱敏成车牌中间用*代替 例如 苏D40000 为 苏D4*********0
  • 银行卡号(bankCard): 脱敏 银行卡号 例如 11011111222233333256 为 1101 **** **** **** 3256
方法功能支持类型原理
desensitized
根据脱敏类型脱敏字符串,使用默认的脱敏策略,CharSequenceXMLReader.parse
userId脱敏 【用户id】不对外提供userIdObject序列化实现
chineseName脱敏【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
idCardNum脱敏【身份证号】前1位 和后2位
fixedPhone脱敏【固定电话】前四位,后两位
mobilePhone脱敏 【手机号码】前三位,后4位,其他隐藏,比如135****2210
address脱敏【地址】只显示到地区,不显示详细地址,比如:北京市海淀区****
email脱敏【电子邮箱】邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com
password脱敏【密码】密码的全部字符都用代替,比如:*****
carLicense脱敏【中国车牌】车牌中间用*代替
bankCard脱敏 银行卡号 1101 **** **** **** 3256

总结

我觉得这一类别也算是比较常用的,电话号码、身份证、坐标系、脱敏都是我们开发中常用的信息校验

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/924468
推荐阅读
相关标签
  

闽ICP备14008679号