这几日项目闲了,从网上逛了一下技术论坛,发现网上有许多人用php,asp,c#写了一个中国联通上网账号算号器,用来方便通过一个wifi来使用多台设备上网,但是感觉没有移动端写的,就看着别人的c#代码也写了一个用java语言实现的。试试,还可以用,现在跟大家分享一下,毕竟现在都移动互联网时代了嘛。
关键代码:
public class CncUtils {
public static String DeCode(char 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("-");
Collections.reverse(Arrays.asList(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] == (int)ustr.charAt(j))
{
if (i < 16)
{
u1 = Integer.parseInt(yzarr[i]);
} else{
x = i % 16;
u1 = Integer.parseInt(yzarr[x]);
}
u1 = ((u1 ^ (l * 3)) ^ k) + j;
x = u1 % 62;
dec_str[i]=ustr.charAt(x);
l = l ^ (x + 9433);
break;
}
}
if (dec_str[i]=='\0')
dec_str[i]=ustr.charAt(i);
k = k + 5;
}
return "2:" + String.valueOf(dec_str);
}
}
然后在Activity中调用:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText edUser;
private EditText edPass;
private Button btnjisuan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
edUser=(EditText)findViewById(R.id.ed_user);
edPass=(EditText)findViewById(R.id.ed_pass);
btnjisuan=(Button)findViewById(R.id.btn_jisuan);
btnjisuan.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_jisuan:
if(TextUtils.isEmpty(edUser.getText().toString())){
Toast.makeText(MainActivity.this, "请输入用户名",
Toast.LENGTH_LONG).show();
return;
}
edPass.setText(CncUtils.DeCode(edUser.getText().toString().toCharArray()));
break;
}
}
}