河南联通(网通)宽带账号算号器C#源码

前几日用了win7 X64系统,想转换一下联通宽带账号,从网上下了个软件,X64的机器竟然运行不了。

于是就上网搜这个源码,但是搜了半天,搜到一个PHP的和一个ASP的,可是我还看不懂这两种。只好硬着头皮照着改成C#的吧。

于是一边搜索对应的PHP或ASP的方法的意思一边用C#对应的方法去改。

下面是代码:

小火柴:https://dabao.me

using System;
using System.Text.RegularExpressions;
/*
 * Desc:河南联通宽带账号算号
 * Author:小火柴https://dabao.me
 * Date:2012-2-26 11:03 
 */
namespace CncDecode
{
    class Program
    {
        static void Main(string[] args)
        {
            //测试一下
            Console.Write("请输入要转换的网通账号:");
            string num = Console.ReadLine();
            Regex r = new Regex(@"^[0-9]+$");
            string num1 = "";
            if (r.Match(num).Success)
                num1 = num;
            else
                return;
            CNC.DeCode(ref num1);
            Console.WriteLine("账号{0}转换后为{1}", num, num1);
            Console.ReadLine();
        }
    }
    /// <summary>
    /// 解码类
    /// </summary>
    static class CNC
    {
        /// <summary>
        /// 解码
        /// </summary>
        /// <param name="num">号码</param>
        public static void DeCode(ref string num)
        {
            //这一堆的什么东西也看不懂,也查不到有这么个算法,估计是联通程序员自己写的一个私有算法
            string ustr = "9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST";
            string yinzi = "25-35-182-236-43-41-53-18-226-215-24-117-35-201-52-17";
            string[] yzarr = yinzi.Split('-');
            Array.Reverse(yzarr);//反转一个一维数组中元素的顺序
            int l = 37, k = 0, u1, x;
            char[] dec_str = new char[num.Length];
            for (int i = 0; i < num.Length; i++)
            {
                for (int j = 0; j < ustr.Length; j++)
                {
                    if (num[i] == ustr[j])
                    {
                        if (i < 16)
                        {
                            u1 = Convert.ToInt32(yzarr[i]);
                        }
                        else
                        {
                            x = i % 16;
                            u1 = Convert.ToInt32(yzarr[x]);
                        }
                        u1 = ((u1 ^ (l * 3)) ^ k) + j;
                        x = u1 % 62;
                        dec_str.SetValue(ustr[x], i);
                        l = l ^ (x + 9433);
                        break;
                    }
                }
                if (dec_str[i].ToString() == "")
                    dec_str.SetValue(ustr[i], i);
                k = k + 5;
            }
            num = "2:" + new string(dec_str);
        }
    }
}

点击查看原图

上一篇‡: 迅雷,快车,旋风链接编码解码 C#

下一篇‡: Access查询前几条的top

最近回复