zoukankan      html  css  js  c++  java
  • CD key 生成

    题目描述如下:

      某欧软件需要实现简易的CD-KEY算法,输入3个正整数,以空格隔开,根据者3个正整数生成的cd-key字符串。输出格式:xxxx-xxxx-xxxx-xxyy。

      包含16个字符,以短划线隔开,其中,cd-key的最后两位yy是用于cd-key的自校验,确保cd-key本身是合法的。

      cd-key使用的字符表:23456789ABCDEFGHJKLMNPQRSTUVWXYZ(共32个,由于1和I,0和O难以辨识,被剔除)

      实现原理如下:

        (1),输入3个32bit正整数,按顺序取每个正整数取低16bit,假设a,b,c,将abc串联在一起组成48bit的唤醒,然后从低到高,每次取5个bit,

          用其取值作为下标,从32字符表中查出对应的字符,循环输出14个字符(提示:第一个输出的字符应该是c的低5bit)。

        (2),上面输出的14个字符即cd-key的从做至右的前14个字符的ascll求和,从低到高,每5bit为下标,查表生成两个字符,作为第15,16,个cd-key

          的字符即为yy

    时间限制:无

    内存限制:无

    输入:  输入3个正整数,以空格隔开

    样例输入:1 1 1

    样例输出:3224-2262-2A22-J2CR

    答案

      python:

        

    num=raw_input()
    char_table="23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
    str_14=''
    str_15=''
    str_16=''
    result=''
    num2 = 0
    bin_num1 = str(bin(int(num[0]))).replace('0b','')
    bin_num2 = str(bin(int(num[2]))).replace('0b','')
    bin_num3 = str(bin(int(num[4]))).replace('0b','')
    bin_48 = bin_num1.zfill(16) + bin_num2.zfill(16) + bin_num3.zfill(16)
    for i in range(14):
        str_14=str_14+char_table[int(bin_48[-5:],base=2)]
        bin_48 = bin_48[-5:]+bin_48[:-5]
    for i in range(14):
        num2 = ord(str_14[i]) +num2
    tmp_str_2=str(bin(int(num2))).replace('0b','').zfill(32)[-10:]
    str_15=char_table[int(tmp_str_2[-5:],base=2)]
    str_16=char_table[int(tmp_str_2[:-5],base=2)]
    result_tmp=str_14+str_15+str_16
    for i in range (16):
        if i % 4 == 0 and i!=0:
            result=result+'-'+result_tmp[i]
        else :
            result = result+result_tmp[i]
    print result
  • 相关阅读:
    如何:为 Silverlight 客户端生成双工服务
    Microsoft Sync Framework 2.1 软件开发包 (SDK)
    Windows 下的安装phpMoAdmin
    asp.net安全检测工具 Padding Oracle 检测
    HTTP Basic Authentication for RESTFul Service
    Windows系统性能分析
    Windows Server AppFabric Management Pack for Operations Manager 2007
    Mongo Database 性能优化
    服务器未能识别 HTTP 标头 SOAPAction 的值
    TCP WAIT状态及其对繁忙的服务器的影响
  • 原文地址:https://www.cnblogs.com/codeblock/p/5957061.html
Copyright © 2011-2022 走看看