当前位置: 首页 > 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.rkmt.cn/news/1417500.html

相关文章:

  • 2026 年 5 月初级会计考前冲刺:时间规划与刷题工具实测指南 - 讲清楚了
  • 华为手机刷机降级避坑指南:MRT HW Flash Tool离线版实测与常见错误解决
  • 2026 年 5 月会计备考避坑:免费在线刷题实测与高效通关指南 - 讲清楚了
  • 皮尔逊相关系数从入门到‘避坑’:用NumPy手撕公式,再拿真实数据验证你的理解
  • Wireshark图形功能新玩法:除了排障,还能帮你做自动化监控和报告
  • 湖北玖晟工业气膜|核心专属优势
  • 森利威尔 SL3043|10-120V 宽压输入 1.25-50V 可调 10A 大电流电源芯片
  • 豆包与抖音内容生态联动实测报告
  • 2026寄快递省钱干货:壹米滴答大件低价渠道+全场景靠谱寄件平台盘点 - 时讯资讯
  • 2026国产插入式超声波流量计十大品牌深度测评:技术参数、市场表现与选型指南 - 水质仪表品牌排行榜
  • Scala核心编程(八)面向对象编程(高级特性)
  • 嘉兴哪里可以做白发养黑?黑奥秘针对性解决问题,科学养黑路径 - 美业信息观察
  • 2026年 矿用局部通风机厂家/厂家推荐榜:运城局扇风机/防爆型/对旋/FBCD抽出式/FBD轴流/六边形可拆卸通风机实力工厂与技术口碑深度解析 - 品牌企业推荐师(官方)
  • 若依框架数据权限发分析
  • 2026年多场景LED显示屏源头厂商综合评估报告 - 品牌企业推荐师(官方)
  • 南京专业中央空调风口清洗维修公司推荐:南京杰达家居科技有限公司服务详解 - 速递信息
  • 干掉繁琐搬运!企业级AI Agent免费社区版深度评测:中小企业数字化转型的“破局”利器
  • 从《半日》到‘半生’:用Python爬虫+数据分析,可视化一个男孩‘半天’里的世界变迁
  • 股票分析提示词
  • DeepSeek云服务部署终极手册(含Terraform模板+安全加固策略+压测报告PDF)——仅开放72小时
  • 仅限本周开放!Gemini新功能Early Access通道关闭倒计时:企业级Prompt工程模板免费领
  • 告别重复数据!Jmeter压力测试中如何用随机参数绕过接口唯一约束(附函数助手详解)
  • 法兰厂家选型参考:资质、交期、起订量三问排除法与决策路径 - 资讯快报
  • OpenClaw与Taotoken无缝对接实现自动化AI任务编排与执行
  • 2026大连代理记账,认准大连盛仕达税务师事务所有限公司! - 小柏云
  • 技术原理篇:GEO(生成式引擎优化)核心技术架构与 AI 收录机制解析
  • 使用nodejs快速构建接入taotoken大模型api的聊天机器人
  • ESP01S使用笔记01--ESP01s固件下载 - 少年
  • 2026 年石家庄 UPS 不间断电源供应商哪家好?主流品牌授权服务商推荐 - 小艾信息发布
  • Linux wget 命令详解:从基础到高级下载技巧