Как замаскировать кредитную карту в sql? - PullRequest
1 голос
/ 27 января 2012

Мне нужно обновить таблицу, содержащую более 1 миллиона записей, чтобы замаскировать кредитные карты.

Я должен сохранить последние 4 цифры, а остальные должны стать X.

Я до сих пор придумываю это

BEGIN TRAN
-- SQL update in batches of 10,000
WHILE (2 > 1)
  BEGIN
    BEGIN TRANSACTION
    UPDATE TOP ( 10000 ) tblMyTable
    SET creditCardNumber = 'XXXXXX' + RIGHT(creditCardNumber, 4)
   WHERE myDate < '2010-Feb-02'

    IF @@ROWCOUNT = 0
      BEGIN
        COMMIT TRANSACTION
         BREAK
      END
    COMMIT TRANSACTION
    -- 1 second delay
    WAITFOR DELAY '00:00:01'
  END -- WHILE
GO
ROLLBACK

Проблема в том, что в базе данных есть записи, которые явно являются поддельными кредитными картами и могут даже не иметь 4 цифр. По сути, мне нужно обновить это, добавив такое же количество X и сохранив последние 4 цифры. Если число меньше 4, добавьте еще несколько X.

Пример

1242 would turn into XXXXXX1242
12 would turn into   XXXXXXXX12 
1234567890 would turn into  XXXXXX7890

Ответы [ 3 ]

3 голосов
/ 27 января 2012

Если единственная проблема состоит в том, что некоторые цифры меньше четырех символов, то слева? - 1001 *

см. Наиболее эффективный способ T-SQL для заполнения varchar слева до определенной длины?

для объяснения того, как

справа ('XXXXXXXXXXXX' + @str, @n)

работает.

2 голосов
/ 27 января 2012
Declare @xx VARCHAR(20)
DECLARE @length INT

SET @length = 17
SET @xx = 'XXXXXXXXXXXXXXXX'

UPDATE TOP ( 10000 ) tblMyTable 
    SET creditCardNumber = SUBSTRING(@xx, 0, @length - len(RIGHT(creditCardNumber, 4))) + RIGHT(creditCardNumber, 4) 
   WHERE myDate < '2010-Feb-02'

посмотрим, решит ли это это.

1 голос
/ 18 октября 2013
select
    stuff(account_no,1,len(account_no)-4,REPLICATE('X', LEN(account_no)-4)),
    account_no,
    stuff(routing_no,1,len(routing_no)-3,REPLICATE('X', LEN(routing_no)-3)),
    routing_no
from dbo.PAYER_BANK_DETAIL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...