前端實現(xiàn)個人信息脫敏(手機號、身份證號、姓名、郵箱)JavaScript代碼示例
前言
在當今數(shù)字化時代,個人信息的安全與隱私保護已成為公眾關(guān)注的焦點。本文將通過JavaScript代碼示例,演示如何對手機號、身份證號、姓名、郵箱等個人數(shù)據(jù)進行脫敏處理。確保滿足需求的同時保護用戶的隱私。
一、手機號
手機號脫敏通常保留前三位和后四位,中間四位用星號替換。通過正則表達式匹配手機號的結(jié)構(gòu),并使用分組捕獲前三位和后四位,中間四位替換為星號。
phoneHide(phone) { let reg = /^(1[3-9][0-9])\d{4}(\d{4}$)/; // 定義手機號正則表達式 phone = phone.replace(reg, '$1****$2'); return phone; }
使用正則表達式對手機號進行脫敏
二、身份證號
對身份證號進行脫敏通常意味著保留身份證號的前幾位和后幾位,而將中間的部分替換為星號。
function desensitizeIDCard(idCard) { if (!idCard || idCard.length < 6) { console.error('請輸入有效的身份證號碼'); return ''; } // 中國大陸的身份證號碼長度為18位 const idLength = 18; // 保留前6位和后4位,中間替換為星號 const prefix = idCard.substr(0, 6); const suffix = idCard.substr(idLength - 4); const middle = '*'.repeat(idLength - 10); return prefix + middle + suffix; } // 示例 console.log(desensitizeIDCard('123456199001010012')); // 輸出: 123456*********0012
三、姓名
對姓名數(shù)據(jù)進行脫敏通常意味著將姓名的一部分替換為星號(*)或其他占位符,以保護個人隱私。
function desensitizeName(name, options) { // 默認脫敏選項 const defaultOptions = { showFirstLetter: true, // 是否顯示第一個字母 starLength: 3 // 脫敏字符的長度 }; // 合并用戶選項和默認選項 const settings = {...defaultOptions, ...options}; // 檢查是否是中文姓名 const isChineseName = /[\u4e00-\u9fa5]/.test(name); // 脫敏函數(shù) const desensitize = (str) => { const firstLetter = str[0]; const restLength = str.length - 1; const stars = settings.showFirstLetter ? '*'.repeat(restLength) : '*'.repeat(str.length); return firstLetter + stars; }; if (isChineseName) { // 假設(shè)中文姓名由兩個或三個字組成 return desensitize(name); } else { // 英文姓名可能由多個單詞組成 const parts = name.split(' '); const desensitizedParts = parts.map(part => desensitize(part)); return desensitizedParts.join(' '); } } // 示例 console.log(desensitizeName('張三', { showFirstLetter: true, starLength: 2 })); // 輸出: 張** console.log(desensitizeName('李四', { showFirstLetter: false })); // 輸出: *** console.log(desensitizeName('John Doe', { showFirstLetter: true, starLength: 2 })); // 輸出: J*** D**
此函數(shù)接受一個姓名字符串和一個選項對象。選項對象可以包含兩個屬性:showFirstLetter
決定是否顯示姓名的第一個字母,starLength
決定脫敏后顯示的星號數(shù)量。函數(shù)會根據(jù)這些選項對中文或英文姓名進行脫敏處理。
請注意,這個函數(shù)假設(shè)中文姓名由兩個或三個漢字組成,而英文姓名由空格分隔的多個單詞組成。如果姓名結(jié)構(gòu)更復雜,可能需要進一步定制函數(shù)以適應不同的脫敏需求。
四、郵箱
對郵箱進行脫敏通常意味著保留郵箱的第一部分(即用戶名部分)和域名部分,而將用戶名的中間部分替換為星號(*)。
function desensitizeEmail(email) { if (!email || !email.includes('@')) { console.error('請輸入有效的郵箱地址'); return ''; } // 分離郵箱的用戶名部分和域名部分 const [username, domain] = email.split('@'); // 確定用戶名部分脫敏后的長度,這里保留前后各2個字符 const visibleLength = 2; // 如果用戶名長度小于或等于保留長度,則不進行脫敏 if (username.length <= visibleLength * 2) { return email; } // 脫敏用戶名部分,中間用星號替換 const visibleUsername = username.substring(0, visibleLength) + '*'.repeat(username.length - visibleLength * 2) + username.substring(username.length - visibleLength); // 重新組合脫敏后的郵箱 return visibleUsername + '@' + domain; } // 示例 console.log(desensitizeEmail('example@email.com')); // 輸出: e*****m@email.com console.log(desensitizeEmail('user123@domain.com')); // 輸出: u*****3@domain.com console.log(desensitizeEmail('test@website.org')); // 輸出: t****e@website.org
此函數(shù)接受一個郵箱字符串作為參數(shù),首先檢查輸入是否有效(即是否包含@
符號)。然后,它將郵箱地址分割為用戶名部分和域名部分。如果用戶名部分的長度小于或等于保留長度(在這個例子中是前后各2個字符),則不會進行脫敏。否則,它將用戶名的中間部分替換為星號。
請注意,這個函數(shù)默認保留了前后各2個字符,但你可以根據(jù)需要調(diào)整visibleLength
的值。此外,如果郵箱地址很短,函數(shù)會直接返回原郵箱地址,不進行脫敏。
總結(jié)
到此這篇關(guān)于前端實現(xiàn)個人信息脫敏(手機號、身份證號、姓名、郵箱)的文章就介紹到這了,更多相關(guān)前端個人信息脫敏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用js判斷TextBox控件值改變?nèi)缓蟪霭l(fā)事件
這篇文章主要介紹了使用js判斷TextBox控件值改變?nèi)缓蟪霭l(fā)事件。需要的朋友可以過來參考下,希望對大家有所幫助2014-03-03bootstrap datetimepicker日期插件超詳細使用方法介紹
本篇文章主要介紹了bootstrap datetimepicker日期插件超詳細使用方法介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等屬性學
這篇文章主要介紹了JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等屬性學習筆記,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07js prototype和__proto__的關(guān)系是什么
這篇文章主要介紹了js prototype和__proto__的關(guān)系是什么,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08