* 敏感信息星号显示
* @param {String} value
* @param {Number} start // 前N位
* @param {Number} end // 后N位
* @param {Boolean} isFixed // 固定(不进行字符长度与明文长度的自适应)
*/
function asterisk (value, start = 3, end = 4, isFixed = false) {
// 电话邮箱等数值类型转换成字符类型
value = value ? value.toString() : ''
// 无牌车,扫码无牌车不加密
if (value.indexOf('无牌车') !== -1) {
return value
}
if (+localStorage.getItem('ipmsIsEncrypt') && value) {
const len = value.toString().length
if (len === 1) {
return '*'
} else if (len === 2) {
return value.replace(/[\s\S]$/, '*')
} else {
let before = start
let after = end
if (!isFixed) {
const commonCount = before + after
const asteriskCount = len - commonCount
if (asteriskCount <= 0) {
if (len <= 6) {
before = 1
after = 1
} else {
before = after = Math.floor(commonCount / 2) - 1
}
} else if (asteriskCount < commonCount / 2) {
before = after = Math.floor(commonCount / 2) - 1
}
}
const reg = new RegExp(`([\\s\\S]{${before}})[\\s\\S]*([\\s\\S]{${after}})`)
let asteriskStr = new Array(len - before - after + 1).join('*')
if (asteriskStr.length > 6) {
asteriskStr = '******'
}
return value.replace(reg, `$1${asteriskStr}$2`)
}
}
return value
}
asterisk("浙123456") asterisk("15734555259")