[精讚] [會員登入]
2559

[PHP] 將字串的部分加上遮罩的函式

有些資料會想要隱藏部分的字元,例如身分證號或信用卡號、電話等。我寫了一個函式來完成這個功能。

分享此文連結 //n.sfs.tw/10970

分享連結 [PHP] 將字串的部分加上遮罩的函式@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-22 22:22:27 最後編修
2017-04-10 00:04:33 By 張○○
 

很簡單的功能,就安全上的理由,主要是把字串的中間部分加上 '*'。

第二個變數 $masknum 如果是負的,代表要留言不 MASK 的個數。

補充:此函數不處理中文字,輸入字串須大於2個字元才會加遮罩。


 /**
  * function MaskString(): Mask a string for security.
  * @scope public
  * @param string $s : input string, >2 characters long string
  * @param interger $masknum : the number of characters in the middle of a string to be masked,
           if masknum is negative, the returned string will leave abs(masknum) characters in 
           both end untouched.
  * @return a masked string
  * ex. MaskString( "12345678",3)  : 123***78
  * ex. MaskString( "12345678",-3)  : 12*****8
  */
  function MaskString($s, $masknum=3){ 
    $len= strlen($s);
    if($masknum<0) $masknum = $len + $masknum;
    if($len<3)return $s;
    elseif( $len< $masknum+1)return substr( $s, 0,1). str_repeat('*',$len-2). substr( $s, -1);
    $right=  ($len-$masknum)>>1;
    $left= $len- $right- $masknum;
    return substr( $s, 0,$left). str_repeat('*',$len-$right-$left). substr( $s, -$right);
  }

原文 2011-05-14 16:31:54

END

你可能感興趣的文章

[PHP] 命名空間 namespace及 use PHP >=5.3 開始支援命名空間:namespace

[PHP] 將UTF8中文字轉成10進位或16進位數值 原本為了處理 preg_match 中文字的問題[2],用php把中文字轉換成10進位和6進位的數值編碼

[PHP7] 讀取mysql資料庫的傳統方法 使用傳統預設的方法來連結mysql資料庫

[PHP] 檢查IP是否在某個網段內 mtachcidr 要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

[phpmyadmin] 錯誤:您應升級到 MySQL 5.5.0 或更新版本 使用phpmyadmin4出現錯誤:您應升級到 MySQL 5.5.0 或更新版本的解決方式

[PHP] 讀取作業系統程式執行結果 PHP讀取作業系統程式執行結果

隨機好文

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

為什麼要重造輪子? 什麼輪子?造什麼輪子?我為什麼要重造輪子?

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

真正的喜悅 幾種喜悅的類型,雖然很簡單,卻是很多人百思不得其解的難題..