【保存版】2013年度発売全パチスロアプリ一覧(iPhone,iPad)

【Access】VBAで宅急便送り状番号の妥当性チェックを実装してみる。

宅急便の伝票についている送り状(送付状)番号。
荷物の追跡が簡単にできて非常に便利ですよね。

ただ、桁数が12ケタもあり、手作業で管理していては、
入力ミスがあるかもしれません。

そこで、AccessのVBAで入力伝票番号チェックを作ってみます。

伝票番号のルール


伝票番号は、12桁で構成されており、最終桁はチェックデジットと
なります。なので、正味11桁+チェック用1桁で12桁という構成です。
チェックデジットは、前11ケタを7で割った余りとなります。

また、大手の業者3社(クロネコヤマト、佐川急便、日本郵便)は同体系です。
*(追記)日本郵便の昔の伝票には、11桁もあるようです。
また、配送業者や商品によっても番号体系が異なるようですので、注意。

http://okwave.jp/qa/q1434660.html
ゆうパック XXX-XXXX-XXXXX(12桁)
EXPACK500 999-XXXX-XXXXX(12桁、上3桁は「999」で固定)
配達記録 XXX-XX-XXXXX-X(11桁)
簡易書留 XXX-XX-XXXXX-X(11桁)
モーニング10 XX-XXXX-XXXXX(11桁)
代引郵便・通常(小包以外) XXX-XX-XXXXX-X(11桁)
EMS(国際スピード郵便) AA XXXXXXXXX JP(英字2桁+数字9桁+JP)

宅急便 XXXX-XXXX-XXXX(12桁)
クロネコメール便 XXXX-XXXX-XXXX(12桁)
ペリカン便 XXX-XX-XXX-XXXX(12桁)
佐川宅配便 10桁のものと12桁のものが存在
飛脚メール便 AXXXXXXXXXXA(英字1桁+数字10桁+英字1桁)
カンガルー宅配便 XXX-XXX-XXXX(10桁)
フクツー宅配便 XXX-XXXX-XXXX(11桁)
PARCEL1 XXX-XXXX-XXXX(11桁)


入力チェックでは、
・桁数が12桁のチェック
・チェックデジットの妥当性チェック
・数値チェック(伝票番号は数値のみなので、今のところ)
ぐらいを行えばほぼ大丈夫かと思います。
(逆にそれ以外はチェックできない。)

(追記)上記要件では対応できない配送会社・商品があります。クロネコヤマトは大丈夫かと思います。(宅急便・メール便共)

伝票番号チェック実装


実装については、Yahoo知恵袋にそのまんまの回答がありましたので、
流用させていただきました。
ヤマト運輸のチェックデジットの算出方法

以下、標準モジュールに張り付けてください。

'*****************************************************************
'宅急便送り状番号入力チェック'
'*****************************************************************
'
'-----------------------------------------------------------------
'サンプル:クロネコヤマト送り状番号(メール便) "7294-2639-7280"
'-----------------------------------------------------------------
'
Public Function gfncChkShipNo(ByVal varChkNo As Variant, _
Optional ByRef intErrCd As Integer, _
Optional ByRef varNewChkNo As Variant _
) As Boolean

On Error GoTo Err_Syori

Dim strCulChkDeg As String

gfncChkShipNo = False 'NG

'ハイフン除去/スペース除去
varChkNo = Nz(varChkNo, "")
varChkNo = Replace(varChkNo, "-", "")
varChkNo = Replace(varChkNo, " ", "")

'大文字を小文字へ変換
varChkNo = StrConv(varChkNo, vbNarrow)

'桁数チェック
If Len(varChkNo) <> 12 Then
intErrCd = 1 '桁数エラー
Exit Function
End If

'数値チェック
If Not IsNumeric(varChkNo) Then
intErrCd = 2 '数値エラー
Exit Function
End If

'チェックデジット算出
strCulChkDeg = (Left(varChkNo, 4) * 3 + Mid(varChkNo, 5, 4) * 6 + Mid(varChkNo, 9, 3)) Mod 7

'チェックデジット正誤判定
If Right(varChkNo, 1) <> strCulChkDeg Then
intErrCd = 3 'チェックデジットエラー
Exit Function
Else
'チェックデジットOK
varChkNo = CStr(Left(varChkNo, 4)) & "-" & CStr(Mid(varChkNo, 5, 4)) & "-" & CStr(Right(varChkNo, 4))
varNewChkNo = varChkNo
End If

gfncChkShipNo = True 'OK

Exit Function
Err_Syori:
MsgBox "システムエラー:" & Err.Number & vbCrLf & Err.Description, 16, "エラーメッセージ"
intErrCd = 99
End Function

イミディエイトウインドで確認してみます。
VBA送り状番号チェック2
正常な伝票番号の場合はTrue、エラーの場合はFalseを返していることが
確認できます。

あとOptionalの戻り値に、エラーコードときれいな伝票番号(ハイフン区切り)が
入っています。

以上、ご参考まで。

(2014/02/17 追記)
あの悪名高い(?)TMG便の伝票番号も同体系のようです。

ちなみに最近は体制が改善されたのかもしれません。
予約商品が何度かTMG便で配送されてきたのですが、
特に遅延等はありませんでした。(過去2回)
[Google PR]

Twitterはじめました。プラプラ | Twitter

<< 【雑記】なに?!SONYパソコン部門売却。VAIOはどうなるのか?
【Access】VBAでクロネコヤマトの荷物追跡サイトを自動チェックするサンプル。 >>

[関連エントリ 最新5]

[Google PR]


[最新エントリ 5]

>>トップページ
人気カテゴリ:AccessTips SQLServer CakePHP iPad
過去ログ(全記事一覧)

コメント
コメントする(お気軽にどうぞ)









この記事のトラックバックURL
トラックバック
カテゴリー
プロフィール
お問い合わせ
Powered by NINJA TOOLS
links
recent comment
  • 【Access】vbaでhmacが正しく計算できた!!
    まさ (06/01)
  • 【Access】AccessReportMailメール送信時のポートを25から587へ
    わら (05/31)
  • 【SQLServer】超シンプル!再帰CTE(共通テーブル式)で連続データを作成する。
    sazi (09/08)
  • 【あまっちゃお】Amazon商品検索「あまっちゃお」プロジェクト始動。Ver00-06-00 β
    カメちゃん (07/31)
  • 【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
    花姉 (03/17)
  • 【Access】実行中のmdb(自分自身)をバックアップコピーする方法。
    亀 (02/06)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    管理人 (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    あ (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    K (11/13)
  • 【VAIOP】VaioXと両持ちできるものすっっごくマニアックなケース。当たり前ですが在庫限り。(笑)
    管理人 (08/04)
recent trackback
  • 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
    awgs Foundry (10/29)
  • 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
    XMLがキライ。 (04/09)
  • Vistaから、LinkStation(NAS)にアクセスできません。
    そのほかいろいろ (09/06)