当前位置: 首页 > news >正文

HarmonyOS 手机号与身份证格式化:FormatUtil 隐私脱敏实战

文章目录

    • 前言
      • isPhone:验证手机号是否合法
      • getPhoneFormat:格式化手机号显示
      • getPhoneLocationName:获取手机号归属地
      • getFormatPhone:隐藏中间 4 位
      • getFormatCardNo:身份证脱敏
      • 综合使用:手机号输入框的实时验证与格式化
      • 写在最后

前言

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓

做 App 绕不开用户信息展示:手机号要格式化成138 0013 8000,身份证要脱敏成110101****1234,手机号还得判断是不是合法的。

这些逻辑每次都自己写正则?太麻烦了。FormatUtil把这些都封装好了,这篇带你过一遍。

isPhone:验证手机号是否合法

先从最基础的验证开始。

// 验证中国手机号(默认 CN)constok=FormatUtil.isPhone(this.inputPhone);this.addLog(`isPhone("${this.inputPhone}") →${ok}`);// 验证美国手机号constok=FormatUtil.isPhone(this.inputPhone,'US');this.addLog(`isPhone("${this.inputPhone}", US) →${ok}`);

isPhone第二个参数是国家代码,默认'CN'(中国大陆)。

这个方法底层用的是 HarmonyOS 的i18n.PhoneNumberFormat,比自己写正则更准确——中国手机号段在不断扩充,靠正则维护很累,用系统 API 就交给系统去维护了。

getPhoneFormat:格式化手机号显示

验证通过了,接下来是格式化显示。

国内格式(NATIONAL)

constr=FormatUtil.getPhoneFormat(this.inputPhone);this.addLog(`getPhoneFormat(NATIONAL):${r}`);// 13800138000 → 138 0013 8000

国际格式(INTERNATIONAL)

constr=FormatUtil.getPhoneFormat(this.inputPhone,'CN',{type:'INTERNATIONAL'});this.addLog(`getPhoneFormat(INTL):${r}`);// 13800138000 → +86 138 0013 8000

三个参数:

  1. 手机号字符串
  2. 国家代码(默认'CN'
  3. 选项对象,type可以是'NATIONAL'(默认)或'INTERNATIONAL'

国内页面展示用 NATIONAL,涉及跨境业务的场景用 INTERNATIONAL。

getPhoneLocationName:获取手机号归属地

// 中文归属地constr=FormatUtil.getPhoneLocationName(this.inputPhone);this.addLog(`归属地(zh-CN):${r}`);// 结果类似:广东// 英文归属地constr=FormatUtil.getPhoneLocationName(this.inputPhone,'en-US');this.addLog(`归属地(en-US):${r}`);// 结果类似:Guangdong

第二个参数是语言标签(BCP 47 格式),不传默认是'zh-CN'

这个 API 也是走系统能力,归属地数据由系统维护,不需要自己维护号段数据库。

不过要注意,归属地只是参考信息,随着携号转网的普及,归属地不代表用户实际所在地。

getFormatPhone:隐藏中间 4 位

这是最常见的手机号脱敏方式,用来在列表页、个人中心等地方展示手机号:

constr=FormatUtil.getFormatPhone(this.inputPhone);this.addLog(`getFormatPhone:${r}`);// 13800138000 → 138****8000

中间 4 位替换成****,用于展示但不泄露完整号码。

getFormatCardNo:身份证脱敏

身份证脱敏比手机号复杂一点,要处理 15 位和 18 位两种格式:

// 18 位身份证脱敏this.addLog(`18位脱敏:${FormatUtil.getFormatCardNo(this.inputCard)}`);// 110101199001011234 → 110101****1234// 15 位身份证脱敏(历史遗留格式)this.addLog(`15位脱敏:${FormatUtil.getFormatCardNo('110101900101123')}`);// 110101900101123 → 1101**101123(规则类似)

脱敏规则:保留前 6 位(地区码)和后 4 位,中间替换为****

实际项目里,用户的身份证信息是高度敏感的,除了展示时要脱敏,传输、存储都要格外注意。

综合使用:手机号输入框的实时验证与格式化

isPhonegetFormatPhone组合,就能实现一个带实时验证和格式化预览的输入框:

@StateinputPhone:string='13800138000';// 输入框TextInput({text:this.inputPhone,placeholder:'手机号'}).layoutWeight(1).height(38).fontSize(13).onChange(v=>{this.inputPhone=v;})// 验证按钮this.Btn('isPhone (CN)','#4A90E2',()=>{constok=FormatUtil.isPhone(this.inputPhone);this.addLog(`isPhone("${this.inputPhone}") →${ok}`);})// 格式化展示this.Btn('getFormatPhone (隐藏中间4位)','#3949AB',()=>{constr=FormatUtil.getFormatPhone(this.inputPhone);this.addLog(`getFormatPhone:${r}`);})

写在最后

涉及个人信息展示,脱敏是基本操作。FormatUtil把这些都做好了,直接用就行:

  • 验证isPhone,支持多国手机号格式
  • 格式化显示getPhoneFormat,NATIONAL 或 INTERNATIONAL
  • 归属地getPhoneLocationName,中英文都支持
  • 脱敏getFormatPhone(手机号)、getFormatCardNo(身份证)

下篇讲 FormatUtil 的数字格式化和 URL 处理部分。

http://www.jsqmd.com/news/906197/

相关文章:

  • 基于Arduino与AI视觉的自动救生艇:从感知到执行的全栈实现
  • 2026 年 5 月初级会计考前冲刺:时间规划与刷题工具实测指南 - 讲清楚了
  • 华为手机刷机降级避坑指南:MRT HW Flash Tool离线版实测与常见错误解决
  • 【同步Overleaf, Github】
  • 2026年东莞精密金属按键/铝合金按键/面板边框/折弯铝面板边框/机箱面板边框厂家推荐:匠心工艺与结构强度双优之选 - 品牌企业推荐师(官方)
  • 揭秘瓷砖厂商不为人知的生产内幕与选砖诀窍
  • 2026年东莞精密蚀刻厂家推荐榜:激光/化学/镂空蚀刻加工,不锈钢铜材标牌滤网微孔无毛刺蚀刻工艺深度解析 - 品牌企业推荐师(官方)
  • Wireshark图形功能新玩法:除了排障,还能帮你做自动化监控和报告
  • 皮尔逊相关系数从入门到‘避坑’:用NumPy手撕公式,再拿真实数据验证你的理解
  • 2026 年 5 月会计备考避坑:免费在线刷题实测与高效通关指南 - 讲清楚了
  • 湖北玖晟工业气膜|核心专属优势
  • 固定资产管理场景:易点易动如何靠它实现企业降本增效
  • 小学期第二周学习记录
  • 2026 年深圳靠谱 UPS 不间断电源供应商盘点,主流品牌供货渠道参考 - 小艾信息发布
  • 2026 年 5 月初级会计备考突围:时间管理与刷题工具避坑指南 - 讲清楚了
  • 2026 年 5 月会计备考突围:免费在线刷题实测与避坑指南 - 讲清楚了
  • HarmonyOS URL 参数处理实战:getQueryValue 与 getParamsUrl 详解
  • 豆包与抖音内容生态联动实测报告
  • 小米 MiMo V2.5 邀请码 WYMVM4
  • 2026跨越速运大件寄件省钱攻略!4个零套路正规平台,碾压官方高价渠道 - 时讯资讯
  • 森利威尔 SL3043|10-120V 宽压输入 1.25-50V 可调 10A 大电流电源芯片
  • 2026寄快递省钱干货:壹米滴答大件低价渠道+全场景靠谱寄件平台盘点 - 时讯资讯
  • 贾子 AI:基于真理约束的认知革命
  • GC-16MC-LZ门侧送暖风机适配哪些采暖场景
  • 2026年三维可视化开发,我只推荐这 5大 3D渲染引擎
  • 从算力到存力:AI性能的决定性因素正在重构
  • 2026国产插入式超声波流量计十大品牌深度测评:技术参数、市场表现与选型指南 - 水质仪表品牌排行榜
  • 2026大连税务申报:机构深度测评榜单! - 小柏云
  • 2026超声波冷热量表国产品牌深度测评:十大品牌技术实力与选型全解析 - 水质仪表品牌排行榜
  • Scala核心编程(八)面向对象编程(高级特性)