• imsi decode


    #测试数据
    '''
    00E802370EF85C806701
    460038550033678
    
    0057029F64E45C806701
    460036000249260
    '''
    
    #0x3FF mask
    H3fMask = 0b1111111111
    
    #0x3FFF mask
    H3ffMask = 0b11111111111111
    
    #0xFFFFFF mask
    H6fMask = 0b111111111111111111111111
    
    minTab = ['1','2','3','4','5','6','7','8','9','0']
    
    def ImsiHundredsDigit(x):
        return int(((x/100)%10))
    
    def ImsiTensDigit(x):
        return int(((x/10)%10))
    
    def ImsiOnesDigit(x):
        return int(((x/1)%10))
    
    class RuimImsiType:
        imsiClass = 0
        imsiS2 = [0,0]
        imsiS1 = [0,0,0]
        imsiL1L2 = 0
        imsiAddrNum = 0
        imsiMcc = [0,0]
        imsi = ''
        tmpdata = ''
    
    #把字符串装换成十六进制,并且输出到dataUim
    def InDataDecode(dataUim,data):
        tmp = 0
        #get X16 data
        for i in range(0,len(data),2):
            tmpstr = str(data[i])+str(data[i+1])
            tmp = int(tmpstr,16)
            #print(tmp)
    
            if i == 0:
                dataUim.imsiClass = tmp
            elif i == 2:
                dataUim.imsiS2[0] = tmp
            elif i == 4:
                dataUim.imsiS2[1] = tmp
            elif i == 6:
                dataUim.imsiS1[0] = tmp
            elif i == 8:
                dataUim.imsiS1[1] = tmp
            elif i == 10:
                dataUim.imsiS1[2] = tmp
            elif i == 12:
                dataUim.imsiL1L2 = tmp
            elif i == 14:
                dataUim.imsiAddrNum = tmp
            elif i == 16:
                dataUim.imsiMcc[0] = tmp
            elif i == 18:
                dataUim.imsiMcc[1] = tmp
            else:
                print("error InDataDecode"+str(i))

            #print('tmp= ' + str(tmp))
            dataUim.tmpdata = dataUim.tmpdata + str(tmp) + ' '

    def DecodeMin1(dataUim):
        min1 =  (dataUim.imsiS1[2] << 16 )| 
                (dataUim.imsiS1[1] << 8 ) | 
                 dataUim.imsiS1[0]

        min_str = min1 & H6fMask
        
        temp = (min_str >> 14) & H3fMask
            
        tempstr = minTab[ImsiHundredsDigit(temp)]
        dataUim.imsi =dataUim.imsi +  tempstr
        tempstr = minTab[ImsiTensDigit(temp)]
        dataUim.imsi = dataUim.imsi + tempstr
        tempstr = minTab[ImsiOnesDigit(temp)]
        dataUim.imsi = dataUim.imsi + tempstr

        temp = ((min_str & H3ffMask) >> 10) & 0b1111
        
        #data
        if temp ==10:
            dataUim.imsi = dataUim.imsi + '0'
        else:
            dataUim.imsi = dataUim.imsi + str(temp)

        temp = min_str & H3fMask

        tempstr = minTab[ImsiHundredsDigit(temp)]
        dataUim.imsi =dataUim.imsi +  tempstr
        tempstr = minTab[ImsiTensDigit(temp)]
        dataUim.imsi = dataUim.imsi + tempstr
        tempstr = minTab[ImsiOnesDigit(temp)]
        dataUim.imsi = dataUim.imsi + tempstr


    def DataCheck():
        if len(data)!= 20:
            print('data error , len error')
            sys.exit()


    if __name__ == '__main__':

        
        #data = "0057029F64E45C806701"
        #data = "00E802370EF85C806701"

        DataCheck()
        
        dataUim = RuimImsiType
        InDataDecode(dataUim,data)

        DecodeMcc(dataUim)
        Decode1112(dataUim)
        DecodeMin2(dataUim)
        DecodeMin1(dataUim)

        print('input data: '+ str(data))
    #   print(dataUim.tmpdata)
        print('imsi      : ' + str(dataUim.imsi))

    higMask = 0b11110000
    lowMask = 0b00001111
    
    def higer_bcd(x):
        return (x & higMask) >> 4 
    
    def lower_bcd(x):
        return (x & lowMask)
    
    if __name__ == '__main__':
        data = "0057029F64E45C806701"
    
        data2 = [73,6,17,96,70,99,34,8]
    
        odd_digits = data2[0] & 0b1000
    
        print('odd_digits = ' + str(odd_digits))
    
        output=[]
    
        for i in range(0,len(data2)):
    
            if i == 0:
                output.append(higer_bcd(data2[i]))
    
            elif i == len(data2)-1:
                output.append(lower_bcd(data2[i]))
                if odd_digits!=0:
                    output.append(higer_bcd(data2[i]))
    
            else:
                output.append(lower_bcd(data2[i]))
                output.append(higer_bcd(data2[i]))
    
        print(str(output))
  • 相关阅读:
    jQuery属性操作,attr 和 prop的区别。笔记记录
    li 自身样式不显示?使用 overflow:hidden 导致li 前面点,圈等样式不见情况处理
    jQuery 最新版类库 和 常用的类库[jquery-1.12.3,jquery-1.7.2]下载
    Excel 中如何让下拉菜单显示汉字,但是值是数字
    Uncaught TypeError: $(...).on is not a function
    全选,全不选,反选的逻辑思路
    Linux 解决 vsftpd 读取目录列表失败的问题。
    SQL Sever 2012数据库从下载到安装完成【一步一图,带上脑子即可】
    【闲暇研究】某问道,游戏的整合记录
    Tomcat 启动后出现乱码的解决办法。
  • 原文地址:https://www.cnblogs.com/asreg/p/6567944.html
Copyright © 2020-2023  润新知