import { isEmptyTrim } from './validate' /** * 字符串脱敏 * @param str 需要脱敏的字符串 * @param hideArea 需要隐藏的下标域 * @param maskLength 固定脱敏字符的长度 * @param maskStr 脱敏字符 默认为‘*’ * @returns 脱敏后的结果 */ export function mask (str: string|undefined, hideArea: [number|undefined, number|undefined], maskLength?: number, maskStr = '*') { if (isEmptyTrim(str)) return str const totalLen = str.length const [start, end] = hideArea const len = maskLength || str.slice(start, end).length const prefix = start ? str.slice(0, start) : '' const middle = maskStr.repeat(len) const suffix = end ? str.slice(end, totalLen) : '' return `${prefix}${middle}${suffix}` } /** * 账户脱敏 * @param account 需要脱敏的账户 * @returns 脱敏后的账户 */ export function maskAccount (account: string) { return mask(account, [4, -4]) } /** * 手机号脱敏 * @param phone 需要脱敏的手机号 * @returns 手机号脱敏 */ export function maskPhone (phone?: string) { return mask(phone, [3, -4]) } /** * 用户名脱敏 * 用户名大于等于四个字会隐藏前两位 其他隐藏前一位 * @param name 需要脱敏的用户名 * @returns 脱敏后的用户名 */ export function maskName (name: string) { return mask(name, [0, name.length >= 4 ? 2 : 1]) }