2012-01-25 33 views
1

我在XML消息中有一個信用卡號碼,我想用正則表達式找到信用卡號碼並加密它。所有的數字都是16個字符長,它們並不總是在xml中的相同位置,所以基本上我認爲我只需要找到一個16個字符的字符串並解密它,但我不知道如何。在XML中查找信用卡號?

例子:

<Message> 
<PaymentInfo> 
<CCNumber>333333333333333</CCNumber> 
</PaymentInfo> 
</Message> 

另一種方式可能是:

<Message> 
<CardInfo> 
<CreditNumber>333333333333333</CreditNumber> 
</CardInfo> 
</Message> 

將會對這種解決工作,這是在VB,但因爲原來的代碼是VB。

Public Shared Function EncryptXmlLog(xml As String) As String 
'Get possible credit card numbers (13 - 16 characters) 

Dim creditCardNumbers As MatchCollection = Matches(xml, "\b\d{13,16}\b") 

For Each creditCardNumber As RegularExpressions.Match In creditCardNumbers 
    xml = xml.Replace(creditCardNumber.Value, Encrypt(creditCardNumber.Value)) 
Next 

Return xml 
End Function 
+0

需要更多的信息。你的問題非常模糊。爲什麼不使用'XmlDocument'類?你能發佈一個'XML'格式的例子嗎? – Jack

+0

你有沒有一個xml的例子?它的結構是否使包含信用號碼的元素能夠以可預測的方式進行識別? – PHeiberg

+0

@PHeiberg - 不,每個xml都不一樣,這就是爲什麼我提到他們並不總是在同一個地方。在某些地方,他們可能在和其他地方可能是 Xaisoft

回答

4

(\d{16}|\d{15}|\d{13})將匹配的16,15,或13

任何數字集不過,我一定要知道爲什麼你不只是在解析之前commonize你的XML文檔。如果有多個文檔,則應該有某種條件解析器。

+0

出於好奇,哪些卡有14或13位數字? – Xaisoft

+0

萬事達卡和美國運通卡...檢查出Mod10算法。 和:http://money.howstuffworks.com/personal-finance/debt-management/credit-card1.htm – Relic

+0

所以美國運通有15,但萬事達卡有16 – Xaisoft

2

嘗試:

​​
+0

我會給這個鏡頭。這隻會匹配16個,而不是更少或更多? – Xaisoft

+0

正確的16位數字0-9,在>和<字符之間。 – Jack

+0

我假設基於Relic的答案,我可以做@「>(\ d {16} | \ d {14} | \ d {13})< – Xaisoft