俺来想想,
将字母项转化为在26个字母的位置,这样整个字符串就全都是数字了
再想想用加减乘除把这个字符串缩成6位就是了~~

解决方案 »

  1.   

    因该有方法实现
    大家都想一想
      

  2.   

    其实要求的就是一个数字摘要算法。随便把原字符进行几轮有规则的错位异或后把结果处理一下就是了。数字摘要算法无法保证唯一性(违反抽屉原理的嘛),不过可以尽量的做到难以重复,常见的如md4,md5,sha-1等,自己也可以发明,不过唯一性就不那么有保证了。下面是随手写的一个例子:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> emu's sample of digest </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="emu">
    <META NAME="Keywords" CONTENT="digest">
    <META NAME="Description" CONTENT="emu's sample of digest">
    </HEAD><BODY>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function String.prototype.myDigest(n){
    if (this.length==0) return new Array(n+1).join("0");
    if (isNaN(n) || n<6) n=6;
    n=Math.round(n);
    if (n>16) n=16;
    var m = Math.pow(10,n);
    var s = this;
    s = s + "':SDFh$76@4)(_>?<;l;eoGS=|\sda!S6fSrincv/.,HG"+s;
    var ar=[];
    for (var i=0;i<s.length;i++){
    j = s.charCodeAt(i);
    ar[i] = j*j;
    }
    var l = ar.length;
    var l2 = l << 1;
    var a = ar.concat();
    ar=ar.reverse();
    for (var k=1;k<n;k++)
    for (var i=0;i<ar.length;i++){
    ar[i] = ar[i] ^ (a[(i+k)%l]);
    }
    var r = 1;
    for (i=0;i<ar.length;i++)
    r = ((ar[i]+1)%(m+1))*r;
    s = (r%m).toString();
    return new Array(n-s.length+1).join("0")+s;
    }//-->
    </SCRIPT>
    <input id=test>
    <input type=button onclick='alert("digest result:"+test.value.myDigest(6))' value="test">
    </BODY>
    </HTML>
      

  3.   

    字母(26*2个大小写)+数字0-9(10个) = 62 个< 2^6 = 64自己写个编码和解码函数可以实现.
      

  4.   

    8位数字或字符的组合有(10+26+26)^8=218340105584896种
    6位数字的组合只有 10^6=1000000种
    没有这样的编码/解码函数让他们可以相互1-1转换的,因为有抽屉原理的限制。
    所以只能做摘要。
      

  5.   

    我赞同上面的观点,这正转换算法从理论上讲是不存在的(无法实现)
      

  6.   

    要编码成为6位的数字当然是不可能的.
    但是编码成为6位的字串(直接显示为乱码)存起来是可能的.