人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

文字列から任意の数値を得られる方法はないでしょうか。


もう少し詳しく書くと、名前から四桁の数値を得られるような感じだと良いと思うのですが・・・


山田太郎 -> 1534


脳内メーカーのような、結果表示の振り分けに使いたいと思っています。


md5 や url エンコードで符号化する方法も考えたのですが、その場合だと英数字が多くなってしまい、結果の幅が広りすぎてしまうため、任意の感じを0?9に振り分けられるのがよいと思っています。


最終的にいい方法がなければ、アルファベットの25文字をゾーンに分けて 0?9 を割り振ろうと思いますが、もう少しスマートな方法があればよいと思っています。

●質問者: ryuzi_kambe
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:md5 URL アルファベット エンコード スマート
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● STRing
●20ポイント

http://www.wdic.org/w/WDIC/CRC

巡回冗長検査 - Wikipedia

CRC を使うのはどうでしょう?

◎質問者からの返答

PHP にも「crc32($string)」という関数があるようですので、

ためしてみます。


2 ● streakeagle
●20ポイント

「任意の感じを0?9に振り分けられるのがよい」と言う事なら((感じ→漢字と読み替えました))、文字コードを10で割った余りを使えばいいのではないでしょうか?

これなら“山田太郎”さんと“山田花子”さんは上位2桁が同じ数字になります。

(ただし、この場合は文字列の長さが4以外の場合の処理が別に必要になりますが。)

◎質問者からの返答

あ?、MS-IME のせいにしてはいけませんが、頭にくる間違いですね>漢字

10で割るのはいいアイディアかもしれませんが、文字コードを16進数かなにかととらえるのでしょうか?

どういう計算が出来るのか示していただけるとありがたいです。


3 ● どんジレ、どんさん
●20ポイント

こんばんは。オープンになっていない他の回答者さんと重複したら恐縮です。


この分野に関してはほとんど知識がないので、お役に立てなかったらすみません。

md5 を試されたとのことですので、釈迦の耳に説法かと存じますが、過去質問のhttp://q.hatena.ne.jp/1193982965が興味深かったので参考までに紹介させていただきます。何かヒントがあるといいのですけれども。


また、下記ジェネレーターでは、暗号式に関してCGIスクリプトを公開しています。資料にならないだろうかと考え、URLを紹介させていただきました。

http://anime.geocities.jp/coil_generator/

http://anime.geocities.jp/coil_generator/script.html



以上、少しでも参考になれば幸いです。

◎質問者からの返答

ほかの質問をご紹介いただき、ありがとうございました。

自作ハッシュ関数をつくるのがよさそうですね。。


4 ● streakeagle
●20ポイント

回答2.の補足です。

Javaであれば下記の様な処理で可能だと思います。(PHPは知らないもので・・・すいません。)

char[] name;// この配列の0?3に氏名が入っていると仮定。

int code = 0; // 氏名に対応する数値。
code += ( name[ 0 ] % 10 ) * 1000;
code += ( name[ 1 ] % 10 ) * 100;
code += ( name[ 2 ] % 10 ) * 10;
code += name[ 3 ] % 10;

「名前は4文字」と仮定して書いた汚いコードですが、これが回答2で書きたかった事です。

◎質問者からの返答

char 型に入れた場合10で割った余りが int に型変換可能な値に

なっているというところは Java 特有の気がしますが、PHP でも

文字列を無理矢理数値で割ってどのような余りの値が出てくるのか

確かめてみることにします。回答ありがとうございました。


5 ● ardarim
●20ポイント

数値の重複をできるだけ避けたいということであれば、md5やsha1など既存の効果が確認されているハッシュアルゴリズムを使うのがよいと思います。

phpが前提のようですが、phpでもmd5やsha1を扱うことができます。


これらのハッシュは数値4桁そのものではありませんが、できたハッシュ(16進文字列)を10進数値化して任意の4桁を取るなど4桁に圧縮すればよいと思います。完全に重複が避けられるわけではないですが、一から自作するよりはましのはずです。

◎質問者からの返答

ありがとうございます。重複がさけられるよう、8桁にしたりしてもよいですよね。参考になる回答、ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ