๋ฃฌ ์๊ณ ๋ฆฌ์ฆ์ด๋?
๋ฃฌ(Luhn) ์๊ณ ๋ฆฌ์ฆ์ 'mod 10' ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, 1954๋ IBM ๊ณผํ์ ํ์ค ํํฐ ๋ฃฌ(Hans Peter Luhn)์ด ๊ณ ์ํ ๊ฐ๋จํ ์ฒดํฌ์ฌ ๊ณต์์ ๋๋ค. ์ ์ฉ์นด๋ยท์ฒดํฌ์นด๋ ๋ฒํธ, ํด๋ํฐ์ IMEI ์ผ๋ จ๋ฒํธ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ๊ตญ๊ฐ์ ์ ๋ถ ์๋ณ๋ฒํธ ๊ฐ์ ์๋ณ ๋ฒํธ์ ์ ํจ์ฑ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ ์๋ฆฌ ์ค๋ฅ์ ๋๋ถ๋ถ์ ์๋ฆฟ์ ๋ค๋ฐ๋(์ ์) ์ค์๋ฅผ ์ก์๋ด์ง๋ง, ์ด๋ ์ํธํ์ ๋ณด์ ์๋จ์ด ์๋๋ผ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ์ผ ๋ฟ์ ๋๋ค.
๊ณ์ฐ๊ธฐ ์ฌ์ฉ ๋ฐฉ๋ฒ
ํ์ธํ๊ณ ์ถ์ ๋ฒํธ๋ฅผ ์ ๋ ฅ๋์ ์ ๋ ฅํ์ธ์(๊ณต๋ฐฑ๊ณผ ํ์ดํ์ ์๋์ผ๋ก ๋ฌด์๋ฉ๋๋ค). ๊ณ์ฐ๊ธฐ๋ ๊ฐ ์๋ฆฟ์๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ฃฌ ์ฒดํฌ์ฌ์ ์ ์ฉํ ๋ค, ํด๋น ๋ฒํธ๊ฐ ์ ํจํจ(VALID)์ธ์ง ์ ํจํ์ง ์์(INVALID)์ธ์ง ์๋ ค์ค๋๋ค. ํจ๊ป ๋์ ํฉ๊ณ, ํฉ๊ณ๋ฅผ 10์ผ๋ก ๋๋ ๋๋จธ์ง, ๋ง์ง๋ง ๊ฒ์ฆ ์ซ์๋ ๋ณด์ฌ์ค๋๋ค.
๊ณต์ ํ์ด
์ซ์๋ฅผ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฝ์ต๋๋ค. ๋งจ ์ค๋ฅธ์ชฝ(๊ฒ์ฆ) ์๋ฆฌ๋ ๊ทธ๋๋ก ๋๊ณ , ๋ ๋ฒ์งธ ์๋ฆฌ๋ง๋ค 2๋ฅผ ๊ณฑํฉ๋๋ค. 2๋ฅผ ๊ณฑํ ๊ฐ์ด 9๋ณด๋ค ํฌ๋ฉด 9๋ฅผ ๋บ๋๋ค(๋ ์๋ฆฟ์๋ฅผ ๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์: \(8 \times 2 = 16 \to 1 + 6 = 7\)). ์ด๋ ๊ฒ ๋์จ ๋ชจ๋ ๊ฐ์ ๋ํฉ๋๋ค. ํฉ๊ณ๊ฐ 10์ผ๋ก ๋๋์ด๋จ์ด์ง๋ฉด ๊ทธ ๋ฒํธ๋ ๋ฃฌ ๊ฒ์ฌ๋ฅผ ํต๊ณผํฉ๋๋ค.
$$\text{Valid} \iff \left(\sum_{i=0}^{n-1} f(d_i)\right) \bmod 10 = 0 \\[1.5em] \text{where}\quad \left\{ \begin{aligned} d_i &= i\text{-th digit of } \text{Number} \text{ (from right)} \\ f(d_i) &= \begin{cases} d_i & i \text{ even} \\ 2d_i - 9\,[2d_i>9] & i \text{ odd} \end{cases} \end{aligned} \right.$$
์์ ๋ก ๋ณด๊ธฐ
๋ฒํธ 79927398713์ ์ดํด๋ด ์๋ค. ์ค๋ฅธ์ชฝ์์๋ถํฐ ๋ ๋ฒ์งธ ์๋ฆฌ๋ง๋ค 2๋ฅผ ๊ณฑํ๊ณ 9๋ฅผ ๋๋ ๊ฐ์ ์ค์ฌ ์ ๋ฆฌํ๋ฉด, ์กฐ์ ๋ ์๋ฆฟ์๋ค์ ํฉ๊ณ๋ 70์ด ๋ฉ๋๋ค. \(70 \bmod 10 = 0\) ์ด๋ฏ๋ก ์ด ๋ฒํธ๋ ์ ํจํฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๋ฃฌ ๊ฒ์ฌ๋ฅผ ํต๊ณผํ๋ฉด ์ค์ ๋ก ์ธ ์ ์๋ ์นด๋์ธ๊ฐ์? ์๋๋๋ค. ๋ฒํธ ํ์์ด ์ฌ๋ฐ๋ฅด๋ค๋ ๊ฒ๋ง ํ์ธํ ๋ฟ, ํด๋น ๊ณ์ข๊ฐ ์ค์ ๋ก ์กด์ฌํ๋์ง๋ ์์ก์ด ์๋์ง๋ ๊ฒ์ฌํ์ง ์์ต๋๋ค.
์ด๋ค ๋ฌธ์๋ฅผ ์ ๋ ฅํ ์ ์๋์? ์ซ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๊ณต๋ฐฑ, ํ์ดํ, ๊ทธ ๋ฐ์ ๊ธฐํธ๋ ๊ณ์ฐ ์ ์ ๋ชจ๋ ์ ๊ฑฐ๋ฉ๋๋ค.
2๋ฅผ ๊ณฑํ ๋ ์ 9๋ฅผ ๋นผ๋์? 9๋ฅผ ๋๋ ๊ฐ์์ 9๋ฅผ ๋นผ๋ฉด ๊ทธ ๊ฐ์ ๋ ์๋ฆฟ์๋ฅผ ๋ํ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก ์๋ ๋ฃฌ ๊ท์น์ด ์๊ตฌํ๋ ๊ณ์ฐ์ ๋๋ค.