用正则表达式保留系统靓号

有的时候用户系统用类似于QQ的号码做为UIN,这个时候可能需要保留鞋好的号码供以后不时之需,怎么实现呢?

正则就行了。看代码。

 

public static Dictionary< string , Regex> _validations = new Dictionary< string , Regex>{
     { "6位顺增号" , new Regex( @"(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}\d" , RegexOptions.Compiled)},
     { "6位顺降好" , new Regex( @"(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){5}\d" , RegexOptions.Compiled)},
     { "6位顺增或顺降号" , new Regex( @"(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){5})\d" , RegexOptions.Compiled)},
     { "4-9位连续号" , new Regex( @"(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3,}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){3,})\d" , RegexOptions.Compiled)},
     { "3位以上重复号" , new Regex( @"([\d])\1{2,}" , RegexOptions.Compiled)},
     //{"日期号",new Regex(@"(19|20)[\d]{2}(1[0-2]|0?[1-9])(31|2[0-9]|1[0-9]|0?[0-9])", RegexOptions.Compiled)},
     //{"手机号码号", new Regex(@"(1[3,5,8][0-9]|15[0-9]|18[0-9])([\d]{2,4}){2}", RegexOptions.Compiled)},
     { "AABBB号" , new Regex( @"([\d])\1{1,}([\d])\2{2,}" , RegexOptions.Compiled)},
     { "ABBXABB号" , new Regex( @"(([\d]){1,}([\d]){1,})\1{1,}" , RegexOptions.Compiled)},
     { "AABBC,ABCDD号" , new Regex( @"([\d])\1{1,}([\d])\2{1,}" , RegexOptions.Compiled)},
};
 
public int GenerateUin()
{
     var r = new Random(( int )DateTime.Now.Ticks);
     var n = r.Next(1000000, 9999999);
     var tmp = "" ;
     var t = n.ToString();
 
     if (!IsGoodUin(t, out tmp)
         && !ObjectContext.Member.Any(m => m.UIN == t))
         return n;
 
     return GenerateUin();               
}
 
public static bool IsGoodUin( string uin, out string reason)
{
     var isGood = false ;
     var r1 = "" ;
 
     _validations.Each(r =>
     {
         if (r.Value.IsMatch(uin))
         {
             isGood = true ;
             r1 = r.Key;
             return false ;
         }
 
         return true ;
     });
 
     reason = r1;
     return isGood;
}

测试以下:

 

public void TestPresentUIN()
{
     100.Each(() =>
     {
         Console.WriteLine(GenerateUin());
     });
}

嗯,输出的号码都是歪瓜裂枣了。呵呵。

转自:http://www.cnblogs.com/nullreference/archive/2010/01/20/keep_present_uin.html

复制代码
代码
   
   
3595046 7212339 8016182 8016182 8418104 8820025 9221947 9221947 9623868 1025791 1427712 1829634 1829634 2633477 3035398 3437320 3437320 3839241 4241163 4241163 4643084 5045006 5446927 5848849 6250770 6652692 7054613 7054613 7456534 7858456 8260377 8260377 9064220 9868063 9868063 1269986 1671907 1671907 2073829 2877672 2877672 4083436 4083436 4485358 6093044 6896887 6896887 7298808 8102651 8102651 8504573 8504573 8906494 9710337 9710337 1514181 1514181 1916103 2318024 2318024 2719946 3121867 3523789 3925710 5935317 5935317 6337239 7141082 7141082 7543003 7944925 7944925 8346846 8748768 9150689 9552611 9954532 1356455 1356455 1758376 2160298 2160298 2562219 3767984 3767984 4169905 4571827 4973748 5375670 5375670 6179513 6179513 6581434 6983356 7385277 7787199 8189120 8992963 8992963 9394885

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值