SQL本身有動態遮罩, 但資料倒到測試環境每個人都有ADMIN權限, 還是能看到個資
所以把遮罩在master作成了一個Function以便update要遮罩的欄位,從第2碼開始遮, 每隔2字遮一次
若是全半形用*號, 如下效果:
123456789012345678901234567890123456789012345678901234567890
↓
1*34*67*90*23*56*89*12*45*78*01*34*67*90*23*56*89*12*45*78*0
只要有全形用囗字, 如下效果:
國泰世華商業銀行股份有限公司慶甲乙分公司
↓
國囗世華囗業銀囗股份囗限公囗慶甲囗分公囗
create FUNCTION [dbo].[fMask]
(
@word nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
declare @wordN nvarchar(max)=substring(@word,1,1)--先取第一個字,從第2碼遮罩
declare @len int= len(@word)--字總長
declare @interval int = 2--間隔幾字作一次遮罩
declare @mask nvarchar(1)=iif(@len = DATALENGTH(convert(varchar(max), @word)), '*', '囗')--全半形用遮罩*, 否則都用囗
declare @mLen int = len(@mask)--遮罩長度
declare @i int = len(@wordN) + @mLen + 1--要抓間隔字的index
while @i -1 <= @len--@i的位置-1是遮罩index, <=長度時就要再作一次
begin
set @wordN = @wordN + @mask + substring(@word, @i, @interval)
set @i = @i + @interval + @mLen--跳過間隔幾個字及遮罩
end
return @wordN
END
Taiwan is a country. 臺灣是我的國家