script/record_mic/GUID.as
author ymh <ymh.work@gmail.com>
Tue, 23 Jul 2024 23:18:21 +0200
changeset 129 f6b392c37e10
parent 61 3eac3e741aa6
permissions -rw-r--r--
lucene 7.7.1 compiled but not compatible with ldt indexation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     1
package {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     2
    
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     3
    import flash.display.Sprite;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     4
    import flash.system.Capabilities;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     5
    
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     6
    public class GUID extends Object {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     7
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     8
        private static var counter:Number = 0;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
     9
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    10
        function GUID(){
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    11
            
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    12
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    13
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    14
        public static function create():String {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    15
            var dt:Date = new Date();
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    16
            var id1:Number = dt.getTime();
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    17
            var id2:Number = Math.random()*Number.MAX_VALUE;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    18
            var id3:String = Capabilities.serverString;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    19
            var rawID:String = calculate(id1+id3+id2+counter++).toUpperCase();
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    20
            var finalString:String = rawID.substring(0, 8) + "-" + rawID.substring(8, 12) + "-" + rawID.substring(12, 16) + "-" + rawID.substring(16, 20) + "-" + rawID.substring(20, 32);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    21
            return finalString;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    22
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    23
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    24
        private static function calculate(src:String):String {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    25
            return hex_sha1(src);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    26
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    27
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    28
        private static function hex_sha1(src:String):String {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    29
            return binb2hex(core_sha1(str2binb(src), src.length*8));
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    30
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    31
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    32
        private static function core_sha1(x:Array, len:Number):Array {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    33
            x[len >> 5] |= 0x80 << (24-len%32);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    34
            x[((len+64 >> 9) << 4)+15] = len;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    35
            var w:Array = new Array(80), a:Number = 1732584193;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    36
            var b:Number = -271733879, c:Number = -1732584194;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    37
            var d:Number = 271733878, e:Number = -1009589776;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    38
            for (var i:Number = 0; i<x.length; i += 16) {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    39
                var olda:Number = a, oldb:Number = b;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    40
                var oldc:Number = c, oldd:Number = d, olde:Number = e;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    41
                for (var j:Number = 0; j<80; j++) {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    42
                    if (j<16) w[j] = x[i+j];
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    43
                    else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    44
                    var t:Number = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    45
                    e = d; d = c;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    46
                    c = rol(b, 30);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    47
                    b = a; a = t;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    48
                }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    49
                a = safe_add(a, olda);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    50
                b = safe_add(b, oldb);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    51
                c = safe_add(c, oldc);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    52
                d = safe_add(d, oldd);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    53
                e = safe_add(e, olde);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    54
            }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    55
            return new Array(a, b, c, d, e);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    56
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    57
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    58
        private static function sha1_ft(t:Number, b:Number, c:Number, d:Number):Number {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    59
            if (t<20) return (b & c) | ((~b) & d);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    60
            if (t<40) return b ^ c ^ d;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    61
            if (t<60) return (b & c) | (b & d) | (c & d);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    62
            return b ^ c ^ d;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    63
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    64
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    65
        private static function sha1_kt(t:Number):Number {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    66
            return (t<20) ? 1518500249 : (t<40) ? 1859775393 : (t<60) ? -1894007588 : -899497514;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    67
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    68
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    69
        private static function safe_add(x:Number, y:Number):Number {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    70
            var lsw:Number = (x & 0xFFFF)+(y & 0xFFFF);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    71
            var msw:Number = (x >> 16)+(y >> 16)+(lsw >> 16);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    72
            return (msw << 16) | (lsw & 0xFFFF);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    73
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    74
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    75
        private static function rol(num:Number, cnt:Number):Number {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    76
            return (num << cnt) | (num >>> (32-cnt));
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    77
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    78
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    79
        private static function str2binb(str:String):Array {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    80
            var bin:Array = new Array();
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    81
            var mask:Number = (1 << 8)-1;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    82
            for (var i:Number = 0; i<str.length*8; i += 8) {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    83
                bin[i >> 5] |= (str.charCodeAt(i/8) & mask) << (24-i%32);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    84
            }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    85
            return bin;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    86
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    87
        
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    88
        private static function binb2hex(binarray:Array):String {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    89
            var str:String = new String("");
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    90
            var tab:String = new String("0123456789abcdef");
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    91
            for (var i:Number = 0; i<binarray.length*4; i++) {
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    92
                str += tab.charAt((binarray[i >> 2] >> ((3-i%4)*8+4)) & 0xF) + tab.charAt((binarray[i >> 2] >> ((3-i%4)*8)) & 0xF);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    93
            }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    94
            return str;
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    95
        }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    96
    }
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    97
}
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    98
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
    99
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   100
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   101
// USAGE /////////////////////////////////////////
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   102
/*
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   103
var myGUID:String = GUID.create();
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   104
trace("myGUID: "+myGUID);
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   105
*/
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   106
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   107
// OUTPUT
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   108
// myGUID: 6EF3BDEC-5B51-3CE9-429C-F99A46EC0980
3eac3e741aa6 enhance filename in recorder.
cavaliet
parents:
diff changeset
   109
//////////////////////////////////////////////////