RMS中不同Item类型商品编号验证规则
Code与界面显示的数据对应关系存储在 控制 -> 系统 -> 代码维护 -> UPCT
当货品类型为可变重PLU时
格式 存储在表var_upc_ean中 (select * from var_upc_ean)
根据 格式 得到 L_begin_item_digit, L_begin_var_digit, L_check_digit (select format_id, begin_item_digit, begin_var_digit, check_digit from var_upc_ean where format_id = 选择的格式)
L_begin_item_digit – 1 等于 前缀 的位数
验证前缀的第1位值为2
如果 L_check_digit 值为 0 则
L_item_length = L_begin_var_digit – L_begin_item_digit;
否则
L_item_length = L_check_digit – L_begin_item_digit;
验证输入编号的长度 = L_item_length
进行 PLU 验证
其它种类货品
Code function rule
——- ——————————————— ———————————————————————-
UPC-A CHECK_UPCA_FMT(O_error_message, I_item_no) 12位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
UPC-AS CHECK_UPCAS_FMT(O_error_message, I_item_no) 15 ~ 18位,且第13位为’-‘;其余为 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
UPC-E CHECK_UPCE_FMT(O_error_message, I_item_no) 8位,均为 0 ~ 9 的数字,进行UPC_E_EXPAND变换,再对其结果进行 CHKDIG_VERIFY_UCC 验证
UPC-ES CHECK_UPCES_FMT(O_error_message, I_item_no) 11 ~ 14位,且第9位为’-‘;其余为 0 ~ 9 的数字,对前8位进行UPC_E_EXPAND变换,再对其结果进行 CHKDIG_VERIFY_UCC 验证
UCC14 CHECK_UCC14_FMT(O_error_message, I_item_no) 14位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
ITEM CHECK_ITEM_FMT(O_error_message, I_item_no) 9位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY 验证
EAN8 CHECK_EAN8_FMT(O_error_message, I_item_no) 8位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
EAN13 CHECK_EAN13_FMT(O_error_message, I_item_no) 13位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
EAN13S CHECK_EAN13S_FMT(O_error_message, I_item_no) 16 ~ 19 位,且第14位为’-‘;15 ~ 19 位为 0 ~ 9 的数字,前13位满足EAN13
ISBN10 CHECK_ISBN10_FMT(O_error_message, I_item_no) 10位,且前9位为 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_ISBN 验证
ISBN13 CHECK_ISBN13_FMT(O_error_message, I_item_no) 13位,且前12位为 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_ISBN 验证
NDC CHECK_NDC_FMT(O_error_message, I_item_no) 12位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
PLU CHECK_PLU_FMT(O_error_message, I_item_no) 4 ~ 5位, 每个都是 0 ~ 9 的数字
SSCC CHECK_SSCC_FMT(O_error_message, I_item_no) 18位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
UPC_E_EXPAND变换
注释:[x] = 第x位
若[7]为0 ~ 2的数字,则temp=0[2][3][7]0000[4][5][6][8];
若[7]为3,则temp=0[2][3][4]00000[5][6][8];
若[7]为4,则temp=0[2][3][4][5]00000[6][8];
否则temp=0[2][3][4][5][6]0000[7][8];
CHKDIG_VERIFY_UCC 验证
被验证数长度为8、12、13、14、18
L_temp_number = 被验证数 / 10 的整数部分
L_char_value = L_temp_number在左边填充0至17位
L_odd_digits = 取所有 L_char_value 奇数位的值相加,结果乘以3
L_even_digits = 取所有 L_char_value 偶数位的值相加
L_last_digit = (L_odd_digits + L_even_digits) MOD 10
将 L_last_digit 的值按照下表进行转换
1, 9,
2, 8,
3, 7,
4, 6,
5, 5,
6, 4,
7, 3,
8, 2,
9, 1,
否则, 0
如果转换结果 = 被验证值的个位,则通过验证,否则不通过
CHKDIG_VERIFY_ISBN 验证
注释:[x] = 第x位
如果长度为10
取前9位放入char_value
L_sum = [1] * 10 + [2] * 9 + [3] * 8 + [4] * 7 + [5] * 6 + [6] * 5 + [7] * 4 + [8] * 3 + [9] * 2
L_sum MOD 11
结果按照如下对应关系进行翻译:
0, ‘0’,
1, ‘X’,
2, ‘9’,
3, ‘8’,
4, ‘7’,
5, ‘6’,
6, ‘5’,
7, ‘4’,
8, ‘3’,
9, ‘2’,
10, ‘1’,
否则 ‘E’
将结果与ISBN的最后一位进行对比,若相同则通过验证
如果长度为13
取前12位放入char_value
L_sum = [1] + [2] * 3 + [3] + [4] * 3 + [5] + [6] * 3 + [7] + [8] * 3 + [9] + [10] * 3 + [11] + [12] * 3
L_sum MOD 10
结果按照如下对应关系进行翻译:
1, 9,
2, 8,
3, 7,
4, 6,
5, 5,
6, 4,
7, 3,
8, 2,
9, 1,
否则 0
将结果与ISBN的最后一位进行对比,若相同则通过验证
CHKDIG_VERIFY 验证
1. 检查 system_options 中 check_digit_ind 的值为 Y (select check_digit_ind from system_options)
2. 被验证数倒数第2位 * system_options.cd_weight_1 +
被验证数倒数第3位 * system_options.cd_weight_2 +
被验证数倒数第4位 * system_options.cd_weight_3 +
被验证数倒数第5位 * system_options.cd_weight_4 +
被验证数倒数第6位 * system_options.cd_weight_5 +
被验证数倒数第7位 * system_options.cd_weight_6 +
被验证数倒数第8位 * system_options.cd_weight_7 +
被验证数倒数第9位 * system_options.cd_weight_8;
3. 结果 MOD system_options.cd_modulus;
4. 用system_options.cd_modulus减去结果再取其个位
5. 如果结果等于被验证数个位,则通过验证,否则不通过验证
关于作者:
昵称:Derek.Jaa 档案信息: 联系方式:你可以通过snipking@live.com联系作者 点击查看Derek.Jaa发表过的所有文章... 本文永久链接: http://blog.retailsolution.cn/archives/1680 |
对本文的评价: