Wikipedia のチェックディジット解説をまんまベタ実装。
このくらい平坦な方が個人的には分かりやすいかな。
ググれば其処彼処、至る所で様々な言語用のサンプルが
ゴロゴロしているのだが、折角書いたことだし此処で供養しておこう。
ISBN-13チェックディジット計算.vbs
Option Explicit Dim input input = InputBox("ISBN12~13桁を入力してください", "ISBN-13チェックディジット計算") If input = "" Then WScript.Quit WScript.Echo "ISBN: " & input & vbCrLf & "チェックディジット: " & CalcCheckDigit10_3_1(input) '指定した数字12桁または13桁の文字列に対するチェックディジットを返す '(モジュラス10 ウェイト3・1)。 '指定した文字列に誤りがあった場合は空文字を返す Function CalcCheckDigit10_3_1(isbn12_13) '指定した文字列が数字12桁または13桁の文字列であるか確認 Dim RE Set RE = CreateObject("VBScript.RegExp") RE.Pattern = "^[0-9]{12,13}$" RE.Global = True '指定した文字列に誤りがあった場合は空文字を返す If Not RE.Test(isbn12_13) Then CalcCheckDigit10_3_1 = "" Set RE = Nothing Exit Function End If Set RE = Nothing '現行規格のISBN (ISBN-13) のチェックディジット計算(Wikipedia参照) Const MODULUS = 10 Const WAIT_ODD = 1 Const WAIT_EVEN = 3 Dim temp Dim sum Dim remainder Dim ret Dim index For index = 0 To 11 'チェックディジットを除いた一番左側の桁から順に1、3、1、3…を掛けてそれらの和を取る。 If ((index + 1) Mod 2) <> 0 Then temp = (CInt(Mid(isbn12_13, index + 1, 1)) * WAIT_ODD) Else temp = (CInt(Mid(isbn12_13, index + 1, 1)) * WAIT_EVEN) End If sum = sum + temp Next '和を10で割る remainder = sum Mod MODULUS '和を10で割って出た、余りの下1桁が0の場合はチェック数字を0とする。 If (remainder Mod 10) = 0 Then ret = 0 Else '和を10で割って出た、余りを10から引く。 ret = MODULUS - remainder End If CalcCheckDigit10_3_1 = CStr(ret) End Function