72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
/**
|
||
* 数据脱敏工具
|
||
*/
|
||
|
||
/**
|
||
* 脱敏手机号
|
||
* @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}`
|
||
}
|
||
|