とあるソースを引用してJANコードをEANコード文字列に変換するものをVB.NETで作った。
その関数を残しておく。そもそも良くコード体系を理解しておらず、ほぼもとのソースを
VBに置き換えただけなのでどうもいけていない。
TODO 時間をみてちゃんと理解し作り直していきたい。
---------------------------------- 以下 ソース ------------------------------------------
' JANコードからバーコード生成用文字列(EAN)への変換処理
Public Shared Function JanToEan(ByVal jan As String) As String
'戻り値
Dim result As String = String.Empty
'対象文字列が数値以外ならここで抜ける
For i As Integer = 0 To jan.Length - 1
'文字コードチェック
Dim ascNum = Asc(jan.Substring(i, 1))
If ascNum < 48 Or ascNum > 57 Then
Return result
End If
Next
'>>* 受け取った文字列長さを元に、処理を分ける
If jan.Length = 8 Then
'取得文字列の長さが8文字の場合
'--コード変換処理(ascii文字のA~Jに変換)
result = ":"
For i As Integer = 0 To 3
result &= Chr(65 + CInt(jan.Substring(i, 1)))
Next
result &= "*"
'ここからは(Ascii文字のa~jに変換)
For i As Integer = 4 To 7
result &= Chr(97 + CInt(jan.Substring(i, 1)))
Next
result &= "+"
ElseIf jan.Length = 13 Then
'取得文字列の長さが13文字の場合
'コード変換処理(ascii文字のA~Jに変換)
result = jan.Substring(0, 1) & Chr(65 + CInt(jan.Substring(1, 1)))
Dim first = CInt(jan.Substring(0, 1))
For i As Integer = 2 To 6
Dim flg = False
Select Case i
Case 2
Select Case first
Case 0, 1, 2, 3
flg = True
Case Else
flg = False
End Select
Case 3
Select Case first
Case 0, 4, 7, 8
flg = True
Case Else
flg = False
End Select
Case 4
Select Case first
Case 0, 1, 4, 5, 9
flg = True
Case Else
flg = False
End Select
Case 5
Select Case first
Case 0, 2, 5, 6, 7
flg = True
Case Else
flg = False
End Select
Case 6
Select Case first
Case 0, 3, 6, 8, 9
flg = True
Case Else
flg = False
End Select
Case Else
flg = False
End Select
If flg Then
'flgがOnなら(ascii文字のA~Jに変換)
result &= Chr(65 + CInt(jan.Substring(i, 1)))
Else
'flgがOffなら(ascii文字のK~Tに変換)
result &= Chr(75 + CInt(jan.Substring(i, 1)))
End If
Next
result &= "*"
'ここからは(Ascii文字のa~jに変換)
For i As Integer = 7 To 12
result &= Chr(97 + CInt(jan.Substring(i, 1)))
Next
result &= "+"
End If
Return result
End Function