Files
cunkebao_v3/Moncter/TaskShow/src/utils/mask.ts
2026-01-05 10:19:51 +08:00

72 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 数据脱敏工具
*/
/**
* 脱敏手机号
* @param phone 手机号
* @returns 脱敏后的手机号138****8000
*/
export const maskPhone = (phone: string | null | undefined): string => {
if (!phone) return '-'
if (phone.length !== 11) return phone
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}
/**
* 脱敏身份证号
* @param idCard 身份证号
* @returns 脱敏后的身份证号110101********1234
*/
export const maskIdCard = (idCard: string | null | undefined): string => {
if (!idCard) return '-'
if (idCard.length === 18) {
return idCard.replace(/(\d{6})\d{8}(\d{4})/, '$1********$2')
} else if (idCard.length === 15) {
return idCard.replace(/(\d{6})\d{6}(\d{3})/, '$1******$2')
}
return idCard
}
/**
* 脱敏银行卡号
* @param cardNo 银行卡号
* @returns 脱敏后的银行卡号6222 **** **** 1234
*/
export const maskBankCard = (cardNo: string | null | undefined): string => {
if (!cardNo) return '-'
if (cardNo.length < 8) return cardNo
const start = cardNo.substring(0, 4)
const end = cardNo.substring(cardNo.length - 4)
const middle = '*'.repeat(Math.max(0, cardNo.length - 8))
return `${start} ${middle} ${end}`
}
/**
* 脱敏姓名
* @param name 姓名
* @returns 脱敏后的姓名,如:张*、李**
*/
export const maskName = (name: string | null | undefined): string => {
if (!name) return '-'
if (name.length === 1) return name
if (name.length === 2) return `${name[0]}*`
return `${name[0]}${'*'.repeat(name.length - 2)}${name[name.length - 1]}`
}
/**
* 脱敏邮箱
* @param email 邮箱
* @returns 脱敏后的邮箱abc****@example.com
*/
export const maskEmail = (email: string | null | undefined): string => {
if (!email) return '-'
const [username, domain] = email.split('@')
if (!domain) return email
if (username.length <= 2) {
return `${username[0]}*@${domain}`
}
return `${username.substring(0, 2)}${'*'.repeat(Math.max(0, username.length - 2))}@${domain}`
}