| 51 | | var ret = []; |
| 52 | | var flag, group, publisher, title, checkdigit; |
| 53 | | if(len == 13) { |
| 54 | | flag = isbn.slice(0, 3); |
| 55 | | ret.push(flag); |
| 56 | | } else { |
| 57 | | flag = ''; |
| 58 | | } |
| 59 | | group = isbn.slice(len-10, len-5); |
| 60 | | if(group.slice(0, 1) < 8) |
| 61 | | group = group.slice(0, 1); |
| 62 | | else if(group.slice(0, 2) < 95) |
| 63 | | group = group.slice(0, 2); |
| 64 | | else if(group.slice(0, 3) < 995) |
| 65 | | group = group.slice(0, 3); |
| 66 | | else if(group.slice(0, 3) < 999) |
| 67 | | group = group.slice(0, 4); |
| 68 | | else |
| 69 | | group = group.slice(0, 5); |
| 70 | | ret.push(group); |
| 71 | | publisher = isbn.slice(len-10+group.length, len-4+group.length); |
| 72 | | if(publisher.slice(0, 2) < 20) |
| 73 | | publisher = publisher.slice(0, 2); |
| 74 | | else if(publisher.slice(0, 2) < 70) |
| 75 | | publisher = publisher.slice(0, 3); |
| 76 | | else if(publisher.slice(0, 2) < 85) |
| 77 | | publisher = publisher.slice(0, 4); |
| 78 | | else if(publisher.slice(0, 2) < 90) |
| 79 | | publisher = publisher.slice(0, 5); |
| 80 | | else if(publisher.slice(0, 2) < 95) |
| 81 | | publisher = publisher.slice(0, 6); |
| 82 | | else |
| 83 | | publisher = publisher.slice(0, 7); |
| 84 | | ret.push(publisher); |
| 85 | | title = isbn.slice(flag.length+group.length+publisher.length, len-1); |
| 86 | | ret.push(title) |
| 87 | | checkdigit = isbn.slice(len-1); |
| 88 | | ret.push(checkdigit); |
| 89 | | return ret.join('-'); |
| | 51 | var re = new RegExp([ |
| | 52 | '^(97[89])?', |
| | 53 | '([0-7]|8\\d|9[0-4]|9[5-8]\\d|99[0-4]|99[5-8]\\d|999\\d{2})', |
| | 54 | '([01]\\d|[2-6]\\d{2}|7\\d{3}|8[0-4]\\d{2}|8[5-9]\\d{3}|9[0-4]\\d{4}|9[5-9]\\d{5})', |
| | 55 | '(\\d{1,6})', |
| | 56 | '([\\dX])$' |
| | 57 | ].join('')); |
| | 58 | return isbn.match(re).slice((len == 13) ? 1 : 2).join('-'); |