JavaScript DHTML/Security/Number Base Converter — различия между версиями

Материал из Web эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 07:27, 26 мая 2010

Number Base Converter in JavaScript

<html>
  <head>
    <!--
      CryptoMX Tools
      Copyright (C) 2004 - 2006 Derek Buitenhuis
      This program is free software; you can redistribute it and/or
      modify it under the terms of the GNU General Public License
      as published by the Free Software Foundation; either version 2
      of the License, or (at your option) any later version.
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    -->
    <title>Number Base Converter</title>
  </head>
  <body>
    <script language=JavaScript>
      <!--calc
      function doBaseCon() {
        form=document.forms[0];
        from=form.from.value;to=form.to.value;val=""+form.val.value;
        if(check(to,0)==1 || check(from,0)==1){form.res.value="Bases must be integer (excluding -1, 0, +1).";return;}
        if(to==0 || from==0){form.res.value="That base is a mathematical impossibility.";return;}
        if(to==-1 || to==1 || from==-1 || from==1){form.res.value="I don"t think that base will work so well.";return;}
        from=1*from;to=1*to;
        txt=baseCon(from,to,val);
        form.res.value=txt;
      }
      function check(n,dec) {
        np=0;e=0;l=n.length;
        for(r=0;r<l;r++) {
          c=n.substring(r,r+1);
          if(c<"0" || c>"9") {
            e2=1;
            if(c=="." && np==0 && dec==1){np++;e2=0;}
            if((c=="+" || c=="-")&& r==0 && l>1){e2=0}
            e=e | e2;
          }
        }if(n=="-." || n=="+.") return 1;
        return e;
      }
      function clr() {
        f=document.forms[0];
        f.res.value="";
      }
      function format(num) {
        if(""+num=="NaN"){return "Check that input."}
        txt="";
        if(num<0){txt+="-"; num*=-1}
        for(n=0; n<11; n++) {
          dig=Math.floor(num);
          num=(num-dig)*10;
          txt+=dig;
          if(n==0)txt+=".";
        }
        return txt;
      }
      function baseCon(from,to,val) {
        val2=baseXCon10(from,val);
        if(""+val2=="nh")sum="No alpha-numerics in base "+from+" numbers."; else sum=base10ConX(to,val2);
        return sum;
      }
      function baseXCon10(from,val){
        val=""+val;sum=0;sgn=1;pl=0;div=1;
        for(a=0;a<val.length;a++) {
          ch=val.substring(a,a+1);
          if(ch=="+" && a==0)sgn=1;
          else {
           if(ch=="-" && a==0)sgn=-1;
           else {
            if(ch==".")div=pl;
            else {
            if(ch>="0" && ch<="9")dg=1*ch;
            ch=ch.toUpperCase();
            if(ch=="A")dg=10;if(ch=="B")dg=11;if(ch=="C")dg=12;if(ch=="D")dg=13;if(ch=="E")dg=14;if(ch=="F")dg=15;
              if(ch>="A" && ch<="Z" && from<=10 && from>0) {nh="nh"; return nh;}
            sum+=Math.pow(from,pl)*dg;
            pl--;
            }
          }
        }
        }
        if(div==1)div=pl;
        sum/=Math.pow(from,div+1);
      if(sum>1000000 && sum-Math.floor(sum)<.000001) sum=Math.floor(sum);
      if(sum>1000000 && Math.ceil(sum)-sum<.000001) sum=Math.ceil(sum);
        sum*=sgn; round=1000000000000
        sum=Math.floor(sum*round+.5)/round;
        return sum;
      }
      function base10ConX(to,val) {
        //to new
        if(val<0){sgn="-";val=-val;}else{sgn="";}
        sum="";
        c=Math.floor(val);
        start=0;rem=0;digits=0;
        if(c==0)sum="0";
        while(Math.abs(c)>=1) {
          d=c-Math.floor(c/to)*to;
            dfl=Math.floor(d);
            if(dfl!=d){rem=d-dfl;d=dfl;}
          if(Math.abs(d)>Math.abs(to)) d=0;
          c=Math.floor(c/to);
          if((start==0 && d!=0) || c<val*to)start=1;start=1;
            sum=""+alp(d,to)+sum;
          digits++;
        }
        c=val-Math.floor(val)+rem;
        if(c!=0) {//decimals
          sum+=".";
          for(a=0;a<32/Math.log(to)-digits;a++) {
            if(c==0)break;
            d=Math.floor(c*to);
            if(to<0 && d==to) break;
            c=c*to-d;
            sum+=alp(d,to);
          }
        }
        sum=sgn+sum;
        return sum;
      }
      function alp(d,to) {
        if(d>=0 && d<=9)w=""+d;
        if(to>=10 && to<=36) {
          if(d==10)w="A";if(d==11)w="B";if(d==12)w="C";if(d==13)w="D";if(d==14)w="E";if(d==15)w="F";if(d==16)w="G";if(d==17)w="H";if(d==18)w="I";if(d==19)w="J";if(d==20)w="K";if(d==21)w="L";if(d==22)w="M";if(d==23)w="N";if(d==24)w="o";if(d==25)w="P";if(d==26)w="Q";if(d==27)w="R";if(d==28)w="S";if(d==29)w="T";if(d==20)w="U";if(d==31)w="V";if(d==32)w="W";if(d==33)w="X";if(d==34)w="Y";if(d==35)w="Z";
        }
        if(d<0 || d>35 || (d>9 && to>36))
          w="["+d+"]";
        return w;
      }
      //-->
    </script>
    <td>&nbsp;&nbsp;</td>
    <td vAlign=top>
      <p><font color=#000000 size=5><b>Number Base Converter</b></font></p>
      <p><font color=#000000 size=3>Convert numbers from one base to another.</font></p>
      <table cellSpacing=0 cellPadding=3 border=1>
        <form name=inp>
        <tbody>
        <tr bgColor=#ffffff>
          <td>from base</td>
          <td>to base</td>
          <td>value to convert</td></tr>
        <tr bgColor=#ffffff>
          <td><input onmousedown=clr() size=5 value=10 name=from> </td>
          <td><input onmousedown=clr() size=5 value=16 name=to> </td>
          <td><input onmousedown=clr() size=50 value=256 name=val> </td></tr>
        <tr bgColor=#ffffff>
          <td><input onclick=doBaseCon() type=button value=calculate name=button>
          </td>
          <td colSpan=2><input size=50 name=res> </td></tr></form></tbody></table>
          </td>
    </tr>
  </body>
</html>