一种校验码算法

 

Example:

PCB Number = CEA79C1234567890

Step 1

                         Take 1st digit („C‟) and Convert to Decimal („12‟)

                         Take 2nd digit („E‟) and Convert to Decimal („14‟)

                         XOR 1st digit (‟12‟) with to 2nd digit („14‟) Store Answer as „CALCULATION_NO‟ („2‟)

                         Take 3rd digit („A‟) and Convert to Decimal („10‟)

                         XOR „CALCULATION_NO‟ with to 3rd digit („10‟) Store Answer as „CALCULATION_NO‟ („8‟)

                         Take 4th digit („7‟)

                         XOR „CALCULATION_NO‟ with to 4th digit („7‟) Store Answer as „CALCULATION_NO‟ („15‟)

                         Take 5th digit („9‟)

                         XOR „CALCULATION_NO‟ with to 5th digit („9‟) Store Answer as „CALCULATION_NO‟ („6‟)

                         Take 6th digit („C‟) and Convert to Decimal („12‟)

                         XOR „CALCULATION_NO‟ with to 6th digit („12‟) Store Answer as „CALCULATION_NO‟ („10‟)

                         Take 7th digit („1‟)

                         XOR „CALCULATION_NO‟ with to 7th digit („1‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         Take 8th digit („2‟)

                         XOR „CALCULATION_NO‟ with to 8th digit („2‟) Store Answer as „CALCULATION_NO‟ („9‟)

                         Take 9th digit („3‟)

                         XOR „CALCULATION_NO‟ with to 9th digit („3‟) Store Answer as „CALCULATION_NO‟ („10‟)

                         Take 10th digit („4‟)

                         XOR „CALCULATION_NO‟ with to 10th digit („4‟) Store Answer as „CALCULATION_NO‟ („14‟)

                         Take 11th digit („5‟)

                         XOR „CALCULATION_NO‟ with to 11th digit („5‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         Take 12th digit („6‟)

                         XOR „CALCULATION_NO‟ with to 12th digit („6‟) Store Answer as „CALCULATION_NO‟ („13‟)

                         Take 13th digit („7‟)

                         XOR „CALCULATION_NO‟ with to 13th digit („7‟) Store Answer as „CALCULATION_NO‟ („10‟)

                         Take 14th digit („8‟)

                         XOR „CALCULATION_NO‟ with to 14th digit („8‟) Store Answer as „CALCULATION_NO‟ („2‟)

                         Take 15th digit („9‟)

                         XOR „CALCULATION_NO‟ with to 15th digit („9‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         Take 16th digit („0‟)

 

                        XOR „CALCULATION_NO‟ with to 16th digit („0‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         If „CALCULATION_NO‟ = 1 or 2 or 4 or 7 or 8 or 11 or 13 or 14 then Set „XOR_NUMBER‟ = 1, else „XOR_NUMBER = 0 (XOR_NUMBER = 0)

                         „CHECKSUM‟ = „XOR_NUMBER‟ (CHECKSUM = 1)

Step 2

                         Take 1st digit („C‟) and Convert to Decimal („12‟)

                         Take 2nd digit („E‟) and Convert to Decimal („14‟)

                         XOR 1st digit (‟12‟) with to 2nd digit („14‟) Store Answer as „CALCULATION_NO‟ („2‟)

                         Take 3rd digit („A‟) and Convert to Decimal („10‟)

                         XOR „CALCULATION_NO‟ with to 3rd digit („10‟) Store Answer as „CALCULATION_NO‟ („8‟)

                         Take 4th digit („7‟)

                         XOR „CALCULATION_NO‟ with to 4th digit („7‟) Store Answer as „CALCULATION_NO‟ („15‟)

                         Take 5th digit („9‟)

                         XOR „CALCULATION_NO‟ with to 5th digit („9‟) Store Answer as „CALCULATION_NO‟ („6‟)

                         Take 6th digit („C‟) and Convert to Decimal („12‟)

                         XOR „CALCULATION_NO‟ with to 6th digit („12‟) Store Answer as „CALCULATION_NO‟ („10‟)

                         Take 7th digit („1‟)

                         XOR „CALCULATION_NO‟ with to 7th digit („1‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         Take 8th digit („2‟)

                         XOR „CALCULATION_NO‟ with to 8th digit („2‟) Store Answer as „CALCULATION_NO‟ („9‟)

                         If „CALCULATION_NO‟ = 1 or 2 or 4 or 7 or 8 or 11 or 13 or 14 then Set „XOR_NUMBER‟ = 1, else „XOR_NUMBER = 0 (XOR_NUMBER = 0)

                         „CHECKSUM‟ = „CHECKSUM‟ + (2 * „XOR_NUMBER‟) (CHECKSUM = 1)

 

Step 3

                         Take 1st digit („C‟) and Convert to Decimal („12‟)

                         Take 2nd digit („E‟) and Convert to Decimal („14‟)

                         XOR 1st digit (‟12‟) with to 2nd digit („14‟) Store Answer as „CALCULATION_NO‟ („2‟)

                         Take 3rd digit („A‟) and Convert to Decimal („10‟)

                         XOR „CALCULATION_NO‟ with to 3rd digit („10‟) Store Answer as „CALCULATION_NO‟ („8‟)

                         Take 4th digit („7‟)

                         XOR „CALCULATION_NO‟ with to 4th digit („7‟) Store Answer as „CALCULATION_NO‟ („15‟)

                         Take 9th digit („3‟)

                         XOR „CALCULATION_NO‟ with to 9th digit („3‟) Store Answer as „CALCULATION_NO‟ („12‟)

                         Take 10th digit („4‟)

                         XOR „CALCULATION_NO‟ with to 10th digit („4‟) Store Answer as „CALCULATION_NO‟ („8‟)

                         Take 11th digit („5‟)

                         XOR „CALCULATION_NO‟ with to 11th digit („5‟) Store Answer as „CALCULATION_NO‟ („13‟)

                         Take 12th digit („6‟)

                         XOR „CALCULATION_NO‟ with to 12th digit („6‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         If „CALCULATION_NO‟ = 1 or 2 or 4 or 7 or 8 or 11 or 13 or 14 then Set „XOR_NUMBER‟ = 1, else „XOR_NUMBER = 0 (XOR_NUMBER = 1)

                         „CHECKSUM‟ = „CHECKSUM‟ + (4 * „XOR_NUMBER‟) (CHECKSUM = 5)

 

Step 4

                         Take 1st digit („C‟) and Convert to Decimal („12‟)

                         Take 2nd digit („E‟) and Convert to Decimal („14‟)

                         XOR 1st digit (‟12‟) with to 2nd digit („14‟) Store Answer as „CALCULATION_NO‟ („2‟)

                         Take 5th digit („9‟)

                         XOR „CALCULATION_NO‟ with to 5th digit („9‟) Store Answer as „CALCULATION_NO‟ („11‟)

                         Take 6th digit („C‟) and Convert to Decimal („12‟)

                         XOR „CALCULATION_NO‟ with to 6th digit („12‟) Store Answer as „CALCULATION_NO‟ („7‟)

 

                        Take 9th digit („3‟)

                         XOR „CALCULATION_NO‟ with to 9th digit („3‟) Store Answer as „CALCULATION_NO‟ („4‟)

                         Take 10th digit („4‟)

                         XOR „CALCULATION_NO‟ with to 10th digit („4‟) Store Answer as „CALCULATION_NO‟ („0‟)

                         Take 13th digit („7‟)

                         XOR „CALCULATION_NO‟ with to 13th digit („7‟) Store Answer as „CALCULATION_NO‟ („7‟)

                         Take 14th digit („8‟)

                         XOR „CALCULATION_NO‟ with to 14th digit („8‟) Store Answer as „CALCULATION_NO‟ („15‟)

                         If „CALCULATION_NO‟ = 1 or 2 or 4 or 7 or 8 or 11 or 13 or 14 then Set „XOR_NUMBER‟ = 1, else „XOR_NUMBER = 0 (XOR_NUMBER = 0)

                         „CHECKSUM‟ = „CHECKSUM‟ + (8 * „XOR_NUMBER‟) (CHECKSUM = 5)

Step 5

                         PCB SN = CEA79C12345678905


使用Oracle函数手动计算过程:


 

SN:CEA79C1234567890

STEP 1:

取值1~16个

select utl_raw.bit_xor('C','E') from dual

select utl_raw.bit_xor('02','A') from dual

select utl_raw.bit_xor('08','7') from dual

select utl_raw.bit_xor('0F','9') from dual

select utl_raw.bit_xor('06','C') from dual

select utl_raw.bit_xor('0A','1') from dual

select utl_raw.bit_xor('0B','2') from dual

select utl_raw.bit_xor('09','3') from dual

select utl_raw.bit_xor('0A','4') from dual

select utl_raw.bit_xor('0E','5') from dual

select utl_raw.bit_xor('0B','6') from dual

select utl_raw.bit_xor('0D','7') from dual

select utl_raw.bit_xor('0A','8') from dual

select utl_raw.bit_xor('02','9') from dual

select utl_raw.bit_xor('0B','0') from dual

select to_number(utl_raw.cast_to_binary_integer('0B')) from dual

结果为11

CHECKSUM=1


STEP 2:

取值1~8

select utl_raw.bit_xor('C','E') from dual

select utl_raw.bit_xor('02','A') from dual

select utl_raw.bit_xor('08','7') from dual

select utl_raw.bit_xor('0F','9') from dual

select utl_raw.bit_xor('06','C') from dual

select utl_raw.bit_xor('0A','1') from dual

select utl_raw.bit_xor('0B','2') from dual

select to_number(utl_raw.cast_to_binary_integer('09')) from dual

结果为9

CHECKSUM=1+2*0=1


STEP3:

取值1~4 & 9~12

select utl_raw.bit_xor('C','E') from dual

select utl_raw.bit_xor('02','A') from dual

select utl_raw.bit_xor('08','7') from dual

select utl_raw.bit_xor('0F','3') from dual

select utl_raw.bit_xor('0C','4') from dual

select utl_raw.bit_xor('08','5') from dual

select utl_raw.bit_xor('0D','6') from dual

select to_number(utl_raw.cast_to_binary_integer('0B')) from dual

结果为11

CHECKSUM=1+4*1=5


STEP4:

取值1~2&5~6&9~10&13~14

select utl_raw.bit_xor('C','E') from dual

select utl_raw.bit_xor('02','9') from dual

select utl_raw.bit_xor('0B','C') from dual

select utl_raw.bit_xor('07','3') from dual

select utl_raw.bit_xor('04','4') from dual

select utl_raw.bit_xor('00','7') from dual

select utl_raw.bit_xor('07','8') from dual

select to_number(utl_raw.cast_to_binary_integer('0F')) from dual

结果为15

CHECKSUM=5+8*0=5


SN:CEA79C12345678905

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值