一种校验码算法

2019-07-14 12:42发布

  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