ハッシュの履歴
あらゆる実体につけられる番号、またはそれを求める方法のこと。実体が異なるならこの番号は絶対に被らないようにしなければならない。
例えば話を「人間」に限るなら、
- たろう君は「1」
- じろう君は「2」
- さぶろう君は「3」
人が変われば番号も変わる。
もうちょっと限定して「ある日の人間」にするなら
- 1990年1月1日のたろう君は「1aa」
- 1990年1月2日のたろう君は「1ab」
- 1990年1月1日のじろう君は「2aa」
- 1990年1月2日のたろう君は「2ab」
人と日時が変われば番号も変わる。
要するに入力する情報とそれに対する番号なわけです。
もうちょっとプログラミングの話に持っていく。ハッシュ関数の代名詞md5で色んな値を求めてみる。
- md5(a) は 0cc175b9c0f1b6a831c399e269772661
- md5(aa) は 4124bc0a9335c27f086f24ba207a4912
- md5(aaa) は 47bce5c74f589f4867dbd57e9ca9f808
ちなみにmd5のようなものをハッシュ関数、求めた値をハッシュ値という。だいたいこのようにハッシュ値は実に覚えにくい値になる。
「IDとどう違うんだ」と思うかもしれない。実際のところハッシュで「Identity」が得られるわけだからのIDの一種だといってもいいと思う。実際、blogのURLやgitのバージョンにも使われてる。コードとか連番IDとかは人が読みやすいようにつけられてるってだけだろうね。
入力された値が同じであれば絶対ハッシュ値が同じになる。ということは、これを使ってある物とある物が変わったかどうかを調べることができる。その物を直接比較することをせずに!!
ちなみにmd5はコリジョン(違う値を入力したのに、同じハッシュ値がでる)が見つかって現在ではあんまり使わない方がいいらしい。
あと、連想配列のことをハッシュって言ったりする。これは連想配列が上記ハッシュの手法を使って構築されてるからです。