チェックサム計算(モジュラス103)

2024年11月7日

チェックサムを計算するのが大変なのでエクセルで作ってみました

桁数を気にしないでよくシンプルな形です

コード表

Value	Table B
0	
1	!
2	"
3	#
4	$
5	%
6	&
7	'
8	(
9	)
10	*
11	+
12	,
13	-
14	.
15	/
16	0
17	1
18	2
19	3
20	4
21	5
22	6
23	7
24	8
25	9
26	:
27	;
28	<
29	=
30	>
31	?
32	@
33	A
34	B
35	C
36	D
37	E
38	F
39	G
40	H
41	I
42	J
43	K
44	L
45	M
46	N
47	O
48	P
49	Q
50	R
51	S
52	T
53	U
54	V
55	W
56	X
57	Y
58	Z
59	[
60	\
61	]
62	^
63	_
64	`
65	a
66	b
67	c
68	d
69	e
70	f
71	g
72	h
73	i
74	j
75	k
76	l
77	m
78	n
79	o
80	p
81	q
82	r
83	s
84	t
85	u
86	v
87	w
88	x
89	y
90	z
91	{
92	|
93	}
94	~
95	D
96	3
97	2
98	S
99	c
100	4
101	a
102	1
103	A
104	B
105	C
106	E

数式

たとえば、「Code Set B」で「HELLO」をエンコードする場合:A1セルに文字を入れるとします

B1セル

=MOD(104+SUMPRODUCT(IFERROR(MATCH(MID(A1, ROW(INDIRECT("1:" & LEN(A1))), 1), codeb!B:B,0),2) - 2,ROW(INDIRECT("1:" & LEN(A1)))), 103)
=MOD(104+SUMPRODUCT(IFERROR(MATCH(MID(A1, ROW(INDIRECT("1:" & LEN(A1))), 1), $codeb.B:B,0),2) - 2,ROW(INDIRECT("1:" & LEN(A1)))), 103)

C1セル

=@INDEX(codeb!B:B,B1+2)
=INDEX($codeb.B:B,B1+2)

D1セル

=codeb!$B$106&A1&C1&codeb!$B$108
=$codeb.$B$106&A1&C1&$codeb.$B$108

計算式の概要

=MOD(104+SUMPRODUCT(IFERROR(MATCH(MID(A1, ROW(INDIRECT("1:" & LEN(A1))), 1), $codeb.B:B,0),2) - 2,ROW(INDIRECT("1:" & LEN(A1)))), 103)

ステップごとの説明:

  1. MID関数とROW関数
    • MID(A1, ROW(INDIRECT("1:" & LEN(A1))), 1)
    • これはセルA1の文字列(例えば「HELLO」)の各文字を1文字ずつ取り出す部分です。
    • ROW(INDIRECT("1:" & LEN(A1)))で1から文字列の長さまでの数列を生成{“H", “E", “L", “L", “O"}し、MID関数でその数列に従って各文字を取り出します
  2. MATCH関数
    • MATCH(MID(A1, ROW(INDIRECT(“1:" & LEN(A1))), 1), $codeb.B:B,0)
    • MID関数で取り出した各文字が$codebシートのB列にある場合、その位置を返します。B列は「Code Set B」の対応表を持つと仮定します。
    • IFERROR(..., 2)はエラーが発生した場合に2を返すようにします。
    • {40, 37, 44, 44, 47}
  3. 重み付け行番号の生成 ROW(INDIRECT("1:" & LEN(A1))) これは行番号の配列です:
    {1, 2, 3, 4, 5}
  4. SUMPRODUCT関数
    • SUMPRODUCT(IFERROR(MATCH(...),2) - 2, ROW(...))
    • MATCHで得た位置から2を引き、文字の位置に基づいた重み付き合計を計算します。
    • 40*1+37*2+44*3+44*4+47*5=657
  5. MOD関数
    • MOD(104 + ..., 103)
    • 最終的に104を足した結果を103で割った余りを計算します。40

文字の取得

=INDEX($codeb.B:B,B1+2)

Hがチェックキャラクターになります

ダウンロード

excel

Posted by eightban