lg-utils-js

兼容 Vue2 与 Vue3 的常用校验 / 脱敏工具插件:身份证校验与信息读取、手机号校验、身份证 / 手机号 / 姓名脱敏
174
Install
npm install lg-utils-js
Latest Version:1.0.0
Vue:2 · 3
License:MIT
Last Updated:Sep 22, 2026
Links: npm
Maintainer: isgang

lg-utils

兼容 Vue2 / Vue3 / uni-app / 微信小程序原生 的常用校验 / 脱敏工具插件:身份证校验与信息读取、手机号校验、身份证 / 手机号 / 姓名脱敏。

核心能力:

  • 一套代码同时兼容 Vue2 / Vue3 / uni-app / 微信小程序原生(纯函数,无平台依赖,任何 JS 环境可用)
  • 身份证校验(15 / 18 位长度 + 字符集)、身份证信息读取(出生年月日、性别)
  • 手机号校验(1 开头、11 位数字)
  • 身份证脱敏(默认前 5 后 4)、手机号脱敏(默认前 3 后 3)、姓名脱敏(2 字脱尾、3 字脱中、4 字及以上脱后两位)
  • 手机号 3-4-4 分段格式化、金额千分位格式化、金额转中文大写
  • TypeScript 编写,输出 ESM / CJS / .d.ts 三种产物

安装

npm install lg-utils-js

快速上手

Vue3

import { createApp } from 'vue'
import LgUtilsPlugin from 'lg-utils'

const app = createApp(App)
app.use(LgUtilsPlugin)

// 组件内
app.component('MyComponent', {
  template: `<div>{{ $lgUtils.maskPhone('17612345210') }}</div>` // 176*****210
})
<script setup>
import { useLgUtils } from 'lg-utils'

const { isIdCard, maskIdCard } = useLgUtils()
maskIdCard('411321199005122433') // 41132*********2433
</script>

Vue2

import Vue from 'vue'
import LgUtilsPlugin from 'lg-utils'

Vue.use(LgUtilsPlugin)

// 任意组件内
this.$lgUtils.maskName('张三丰') // 张*丰

uni-app / 微信小程序原生 / Node(非 Vue 环境)

纯函数,无需 app.use(),直接引入使用:

import { isPhoneNumber, maskName } from 'lg-utils'

isPhoneNumber('17612345210') // true
maskName('诸葛孔明') // 诸葛**

API

身份证

方法 说明 示例
isIdCard(id) 校验身份证号码:18 位(前 17 位数字 + 末位数字或 X/x)或 15 位(全数字) isIdCard('411321199005122433') → true
getIdCardInfo(id) 读取出生日期与性别;15 位年份按 19xx 处理,出生日期不合法(如 2 月 30 日)返回 null 见下
maskIdCard(id, options?) 脱敏,默认前 5 后 4,中间掩码按实际位数等长替换;支持字符串 / 数字入参(18 位数字超 JS 安全整数范围会丢精度,建议传字符串) maskIdCard('411321199005122433') → 41132*********2433

getIdCardInfo 返回值(IdCardInfo):

{
  birthYear: 1990,      // 出生年份
  birthMonth: 5,        // 出生月份
  birthDay: 12,         // 出生日
  birthDate: '1990-05-12', // 出生日期 YYYY-MM-DD
  gender: 1,            // 1 = 男,2 = 女
  genderText: '男'       // '男' | '女'
}
getIdCardInfo('11010519491231002X')
// { birthYear: 1949, birthMonth: 12, birthDay: 31, birthDate: '1949-12-31', gender: 2, genderText: '女' }

maskIdCard 选项(MaskOptions):

选项 默认值 说明
front 5 保留前几位
back 4 保留后几位
maskChar '*' 掩码字符

长度小于等于「前保留 + 后保留」时整体脱敏;空串 / 非字符串返回空串。

手机号

方法 说明 示例
isPhoneNumber(phone) 校验手机号:1 开头、11 位数字 isPhoneNumber('17612345210') → true
maskPhone(phone, options?) 脱敏,默认前 3 后 3,中间掩码按实际位数等长替换;支持字符串 / 数字入参 maskPhone('17612345210') → 176*****210

maskPhone 选项同 maskIdCard(front / back 默认均为 3)。

格式化

方法 说明 示例
formatPhone(phone, options?) 手机号 3-4-4 分段(先校验合法性,非法返回空串) formatPhone('17612345210') → 176 1234 5210
formatAmount(amount, options?) 金额千分位格式化 formatAmount(1234567.89) → 1,234,567.89
toChineseAmount(amount) 金额转中文大写(报销 / 合同场景) toChineseAmount(1234.56) → 壹仟贰佰叁拾肆元伍角陆分

formatPhone 选项:separator(分段分隔符,默认空格)。

formatAmount 选项(FormatAmountOptions):

选项 默认值 说明
separator ',' 千分位分隔符
precision 不填保留原值 小数位数(四舍五入)

toChineseAmount:

  • 支持到千亿级(0 <= amount < 1e12),以「分」为单位的整数运算避免浮点误差
  • 整角规则:0.5 → 伍角整,1.05 → 壹元零伍分,无小数 → 壹仟零贰拾肆元整
  • 负数 / 超出范围 / 非法输入返回空串

姓名

方法 说明 示例
maskName(name, options?) 按字数脱敏 见下

默认规则(maskChar 默认 '*'):

  • 1 字:整体脱敏,李 → *
  • 2 字:脱敏尾数,李白 → 李*
  • 3 字:脱敏中间,张三丰 → 张*丰
  • 4 字及以上:脱敏后两位,诸葛孔明 → 诸葛**

开发

npm install          # 安装依赖
npm run build        # 类型检查(vue-tsc) + Vite 库模式构建 + terser 混淆 → dist/index.js (ESM) / dist/index.cjs (CJS) / dist/index.d.ts
npm test             # vitest + jsdom 运行 tests/ 下所有 *.test.ts(watch 模式)
npm run typecheck    # 仅类型检查

Related Packages

@devindex/vue-mask

Mask Plugin for Vue 3

209,686 66
di-vue-mask

Vue Mask Plugin

27,584 66
vue-validator

Validator component for Vue.js

80,472 2,167
vue-reactivestorage

Reactive layer for interacting with localStorage from Vue.

1,283 126
@morgul/snowpack-plugin-vue2

A snowpack vue2 compiler based on `@snowpack/plugin-vue`.

9,507 6

Version History

Version Released Vue License
1.0.0 ^2.7.0 || ^3.0.0 MIT