用于信用卡号的ruby字符串操作

时间:2009-12-15 00:48:10

标签: ruby-on-rails ruby string credit-card activemerchant

在rails项目上工作,其中有一个订单确认字符串,其中包含除了最后四位数字以外的所有信用卡号码。什么是进行字符串替换的正确方法?

获得此操作的操作是什么

credit_card_number = "1111111111111111"

到此?

credit_card_number = "************1111"

谢谢,

贤治

3 个答案:

答案 0 :(得分:15)

这是一种正则表达式方法:

x.gsub!(/.(?=....)/, '*')

这是一种使用字符串索引的方法:

x = '*' * (x.size - 4) + x[-4, 4]

答案 1 :(得分:9)

如果您使用的是ActiveMerchant,ActiveMerchant::Billing::CreditCard有一个名为display_number的实例方法可以执行此操作,例如XXXX-XXXX-XXXX-4338

如果不是,请复制activemerchant:

def last_digits(number)    
  number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1) 
end

def mask(number)
 "XXXX-XXXX-XXXX-#{last_digits(number)}"
end

credit_card_number = "1111111111111111"

display_number = mask credit_card_number

答案 2 :(得分:2)

您可以使用Ruby的gsub方法和正则表达式来隐藏帐号字符串中的一些数字:

hidenumber = "123-123-1234"
hidenumber.gsub(/(\d{3}-\d{3})/,"xxx-xxx")