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的数字颠倒顺序的话,校验码是一样的

  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/Spacecup/p/3785142.html
Copyright © 2011-2022 走看看