feat:无ISBN上传ISBN规则处理-13位直接返回/10位转13位/空或无法识别生成678随机
This commit is contained in:
parent
247d582af8
commit
4c9d0bae02
@ -3352,10 +3352,45 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 无ISBN上传 - 获取ISBN值,为空时生成13位随机数(678开头)
|
// 无ISBN上传 - 获取ISBN值(按规则处理)
|
||||||
getNoIsbnIsbnValue() {
|
getNoIsbnIsbnValue() {
|
||||||
if (this.noIsbnIsbn) return this.noIsbnIsbn
|
var raw = (this.noIsbnIsbn || '').replace(/[^0-9]/g, '')
|
||||||
|
|
||||||
|
// 1. 13位、978/979开头 → 直接返回
|
||||||
|
if (raw.length === 13 && (raw.indexOf('978') === 0 || raw.indexOf('979') === 0)) {
|
||||||
|
return raw
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 10位 → 换算成13位
|
||||||
|
if (raw.length === 10) {
|
||||||
|
return this.convertIsbn10To13(raw)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 统一书号
|
||||||
if (this.noIsbnUnifyIsbn) return this.noIsbnUnifyIsbn
|
if (this.noIsbnUnifyIsbn) return this.noIsbnUnifyIsbn
|
||||||
|
|
||||||
|
// 4. 其他情况(为空或无法识别)→ 生成678开头的13位随机数
|
||||||
|
return this.generateRandomIsbn()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 10位ISBN转13位
|
||||||
|
convertIsbn10To13(isbn10) {
|
||||||
|
var prefix = '978'
|
||||||
|
var first9 = isbn10.substring(0, 9)
|
||||||
|
var base12 = prefix + first9
|
||||||
|
// 重新计算第13位校验码
|
||||||
|
var sum = 0
|
||||||
|
for (var i = 0; i < 12; i++) {
|
||||||
|
var weight = (i % 2 === 0) ? 1 : 3
|
||||||
|
sum += parseInt(base12[i], 10) * weight
|
||||||
|
}
|
||||||
|
var remainder = sum % 10
|
||||||
|
var checkDigit = remainder === 0 ? 0 : 10 - remainder
|
||||||
|
return base12 + checkDigit
|
||||||
|
},
|
||||||
|
|
||||||
|
// 生成678开头的13位随机ISBN
|
||||||
|
generateRandomIsbn() {
|
||||||
var rand = ''
|
var rand = ''
|
||||||
for (var i = 0; i < 10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
rand += Math.floor(Math.random() * 10)
|
rand += Math.floor(Math.random() * 10)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user