zoukankan      html  css  js  c++  java
  • 【转】数字电视卡末尾识别码算法

    转自:http://hi.baidu.com/superfeng/item/12a8bfde13bc934fdcf9be4d

    最近被暂时抽调到单位的收费部门让帮忙搞数字有线电视。

    在批量转移用户的同时还要转移原来的几千户采用洛阳数字电视前端的用户的档案,再转移的时候发现有线电视用户卡最后的一位数字是识别码,几经周折找到了数字卡的开发人员,他告诉了我这个识别码的算法,内容如下:

    ===============================邮箱原文==========================================
    >> 这个是国标的,有本书《识别卡国家标准汇编》中国出版社,如果你买到这本书,在57页
    >> GB/T 15694.1-1995 的附录B中描述的
    >> 
    >> 计算luhn模10“各位乘2加"校验数字公式
    >> 计算步骤如下:
    >> 步骤1:从右边第一个数字(低序)其实每隔一位乘以2
    >> 步骤2:把步骤1中获得的乘机的各位数字与原号码中未乘2的各位数据相加
    >> 步骤3:从临近较高的一个以0结尾的数中减去步骤2中得到的总和[这相当于求这个综合的地位数字(各位数)的”10的补数“]。
    >>       如果步骤2得到的综合是以0结尾的数(如30,40等等),则检验数字是0。
    >> 
    >> 例如 无校验数字帐号 4992 73 9871
    >> 4   9 9   2   7   3 9   8 7   1
    >>    *2     *2       *2    *2     *2
    >> -------------------------------------------
    >>   18      4        6     16      2
    >> 
    >> 4+1+8+9+4+7+6+9+1+6+7+2=64
    >> 
    >> 70-64 = 6
    >> 
    >> 那么带有校验位的数字帐号就是   4992 73 9871 6
    
    ============================我简单写的算法=================================
    
    <SCRIPT Language="VBScript">
    function sd(sn)
    count=len(sn)
    
    For i = 0 To (count - 1)
       sn1 = sn1 & (Mid(sn,(count-i),1)*2) 
       i = i + 1
    Next
    
    Dim sn2
    sn2 = 0
    For i = 0 To (count - 1)
       i = i + 1
       If i = count Then Exit for 
       sn2 = sn2 + cint(Mid(sn,(count-i),1)) 
    Next
    
    count = Len(sn1)
    
    Dim sn3
    sn3 = 0
    
    For i = 1 To count
       sn3 = sn3 + CInt(Mid(sn1,i,1))
    Next
    
    sn4 = sn2 + sn3
    
    sd = CInt((CInt(Left(sn4,1)) + 1) & 0) - (sn2 + sn3)
    
    If sd = 10 Then
       sd = 0
    End if
    
    end Function
    
    Function cksn(sn)
    count=Len(sn)
    If count <> 16 Then
       MsgBox "数字卡错误"
       Exit function
    End if
    If CInt(sd(mid(sn,1,count-1))) <> CInt(Mid(sn,count,1)) Then
       MsgBox "数字卡错误"
    End if
    End function
    </SCRIPT>

    我的见解:如果未乘2的数字颠倒顺序的话,校验码是一样的

  • 相关阅读:
    Android 内存剖析 – 发现潜在问题
    Android内存泄漏问题(一)
    Android的事件处理机制详解(二)-----基于监听的事件处理机制
    Android的事件处理机制(一)------基于回调机制的事件处理
    OOA、OOD 和 OOP
    面向对象初识
    Python 2 和 Python 3 的区别
    软件开发规范
    语法分析和词法分析
    循环删除的坑
  • 原文地址:https://www.cnblogs.com/Spacecup/p/3785142.html
Copyright © 2011-2022 走看看