C# 在XML中查找信用卡号?

C# 在XML中查找信用卡号?,c#,asp.net,regex,vb.net,C#,Asp.net,Regex,Vb.net,我在XML消息中有一个信用卡号,我想使用正则表达式查找信用卡号并对其进行加密。所有的数字都有16个字符长,而且它们在xml中并不总是在同一个位置,所以基本上我认为我只需要找到一个16个字符的字符串并对其解密,但我不确定如何解密 例如: <Message> <PaymentInfo> <CCNumber>333333333333333</CCNumber> </PaymentInfo> </Message> (\d{16}|

我在XML消息中有一个信用卡号,我想使用正则表达式查找信用卡号并对其进行加密。所有的数字都有16个字符长,而且它们在xml中并不总是在同一个位置,所以基本上我认为我只需要找到一个16个字符的字符串并对其解密,但我不确定如何解密

例如:

<Message>
<PaymentInfo>
<CCNumber>333333333333333</CCNumber>
</PaymentInfo>
</Message>
(\d{16}|\d{15}|\d{13})
将匹配16、15或13的任何数字集

但是,我必须知道为什么不在解析之前将XML文档公共化。如果有多个文档,您应该有某种类型的条件解析器。

(\d{16}\d{15}\d{13})
将匹配16、15或13的任何数字集

但是,我必须知道为什么不在解析之前将XML文档公共化。如果有多个文档,您应该有某种条件解析器。

试试:

   var match = Regex.Match(xmlStrin, @">(\d{16})<"); 
   var number = match.Groups[1].Value;
var match=Regex.match(xmlStrin,@“>(\d{16})试试:



var match=Regex.match(xmlStrin,@“>(\d{16})需要更多信息。你的问题很模糊。为什么不使用
XmlDocument
类?你能发布一个
XML
格式的示例吗?你有XML的示例吗?它的结构是否使包含信用证号码的元素可以以可预测的方式识别?@PHeiberg-不,每个XML都是不同的,这就是为什么我要ned说,他们并不总是在同一个地方。在一些地方,他们可能介于两者之间,而在另一些地方,最好能得到一个解释,说明为什么会这样-voted@Jack-我添加了几个示例,但它的存储方式远远不止我刚才发布的两种。我使用的是XmlDocument,问题是我必须发送decrypted信用卡给客户,但之后我将xml消息存储在数据库日志表中,在那里我需要找到16位数字并对其进行解密以供存储。需要更多信息。你的问题非常模糊。为什么不使用
XmlDocument
class?你能发布一个
xml
格式的示例吗?你有xml的示例吗?它是st对包含信用证号码的元素进行结构化,以便能够以可预测的方式识别?@PHeiberg-不,每个xml都是不同的,这就是为什么我提到它们并不总是在同一个位置。在某些地方,它们可能介于两者之间,而在另一些地方,如果能够解释为什么会出现这种情况,那就太好了-voted@Jack-我补充说我举了几个例子,但它的存储方式远远不止我刚才发布的两个。我使用的是XmlDocument,问题是我必须向客户端发送一张解密的信用卡,但之后我将xml消息存储在一个数据库日志表中,在那里我需要找到16位数字并对其进行解密以供存储。只是出于好奇,what卡有14或13位数字?万事达卡和美国运通…检查一下Mod10算法。而且:美国运通有15位,但万事达卡有16位。我不能通用xml,因为每个xml消息都发送到不同的酒店物业管理系统,他们希望xml采用不同的格式。有一个小组正在尝试标准化是的,我会使用有条件的,旧的万事达卡确实有13个…所以使用正则表达式解析13->16个数字,然后在它们上面运行MOD10,看看它是否符合信用卡标准只是出于好奇,什么卡有14或13个数字?万事达卡和美国运通…检查MOD10算法。那么merican Express有15个,但Master Card有16个。我不能将xml通用化,因为每个xml消息都发送到不同的酒店物业管理系统,他们希望xml采用不同的格式。有一个小组正在尝试将其标准化,但没有人愿意遵循。是的,我会使用有条件的,旧的MasterCard确实有13个…所以使用该正则表达式解析13->16位数字,然后在它们上运行MOD10,看看它是否符合信用卡标准。我会试一试。这是否只匹配16位,而不是更少或更多?正好是16位0-9,介于>和<字符之间。我假设根据Relic的回答,我可以执行@“>(\d{16}\d{124;\ d{14}\d{13})而且我相信这也会起作用:\b\d{13,16}\b,对吗?不。它也匹配
15
位。我会试一试。这只匹配16位,而不是更少或更多吗?正好是16位0-9,介于>和(\d{16}\d{14}\d{13})而且我相信这也会起作用:\b\d{13,16}\b,对吗?不。它也匹配
15
数字。
 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
   var match = Regex.Match(xmlStrin, @">(\d{16})<"); 
   var number = match.Groups[1].Value;