]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/barcode.js
internal: an alternative to default_focus
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / barcode.js
1 dump('entering util/barcode.js\n');
2
3 if (typeof util == 'undefined') var util = {};
4 util.barcode = {};
5
6 util.barcode.EXPORT_OK    = [ 
7     'check', 'checkdigit',
8 ];
9 util.barcode.EXPORT_TAGS    = { ':all' : util.barcode.EXPORT_OK };
10
11 util.barcode.check = function(bc) {
12     if (bc != Number(bc)) return false;
13     bc = bc.toString();
14     // "16.00" == Number("16.00"), but the . is bad.
15     // Throw out any barcode that isn't just digits
16     if (bc.search(/\D/) != -1) return false;
17     var last_digit = bc.substr(bc.length-1);
18     var stripped_barcode = bc.substr(0,bc.length-1);
19     return util.barcode.checkdigit(stripped_barcode).toString() == last_digit;
20 }
21
22 util.barcode.checkdigit = function(bc) {
23     var reverse_barcode = bc.toString().split('').reverse();
24     var check_sum = 0; var multiplier = 2;
25     for (var i = 0; i < reverse_barcode.length; i++) {
26         var digit = reverse_barcode[i];
27         var product = digit * multiplier; product = product.toString();
28         var temp_sum = 0;
29         for (var j = 0; j < product.length; j++) {
30             temp_sum += Number( product[j] );
31         }
32         check_sum += Number( temp_sum );
33         multiplier = ( multiplier == 2 ? 1 : 2 );
34     }
35     check_sum = check_sum.toString();
36     var next_multiple_of_10 = (check_sum.match(/(\d*)\d$/)[1] * 10) + 10;
37     var check_digit = next_multiple_of_10 - Number(check_sum); if (check_digit == 10) check_digit = 0;
38     return check_digit;
39 }
40
41 dump('exiting util/barcode.js\n');