2013-04-16 217 views
5

我有一种情况,我需要尝试并过滤掉伪造的SSN号码。从我目前看到的,如果他们是假的,他们都是相同的数字或123456789.我可以过滤最后一个,但有一个简单的方法来确定是否所有的角色是相同的?C#确定字符串中的所有字符是否相同

+1

S =空&& s.Length> 1个&& S [s.Length - 1] == S [0] – Jay

+0

只需使用字符串中的第一个字符,并使用回答这个问题之前的数发生次数:http://stackoverflow.com/questions/10391481/number-of-occurrences-of-a-character-in-a-string – JeffO

+0

问题在其他地方会发生多少次?如果需要偏移所需的不确定性... – Jay

回答

34

回报(SSN。Distinct() .Count中()== 1)

+7

我相信你的意思是'ssn.Distinct()。Count()' – Aron

+0

好,它利用LINQ。 –

+0

固定每@亚伦的更正 – AShelly

1

抓住第一个字符,然后循环。

var ssn = "222222222"; 
var fc = ssn[0]; 

for(int i=0; i<ssn.Length; i++) 
{ 
    if(ssn[i]!=fc) 
     return false; 
} 

return true; 

当然,你也应该检查的ssn

+0

字符串为null这个中断:p – Jay

+0

雅..空字符串也打破这个。 OP应该注意这个问题。 –

5

长度此方法应该做的伎俩:

public static bool AreAllCharactersSame(string s) 
{ 
    return s.Length == 0 || s.All(ch => ch == s[0]); 
} 

说明:如果一个字符串的长度为0,那么当然,所有字符是相同。否则,如果字符串的所有字符都与第一个字符相同,则它们都是相同的。

+0

如果长度只有1个字符,该怎么办:P – Jay

+0

@Jay 1个字符的字符串具有全部相同的字符,因此一般“找出该字符串的字符是否都是相同的”方法应该返回“true”。 –

+0

No null check ... – Jay

3

要GID摆脱这个问题,因为我们是在谈论SSN。您可以检查并使用this CodeProject演示项目来验证SSN。虽然这是在VB.Net,我想你可以想出相同的想法。 !

+0

对这里的限制进行编码可能是比您想象的任何过滤器更好的解决方案。 – AShelly

+0

但是如果输入的值是假的,你将如何验证SSN?例如123456798?我们需要通过验证实施多项规则。检查所有字符是否相同不足以使其可靠。 – lexeRoy

1
char[] chrAry = inputStr.ToCharArray(); 
char first = chrAry[0]; 

var recordSet = from p in chrAry where p != first select p; 
return !recordSet.Any(); 
相关问题