プロが教えるわが家の防犯対策術!

いつもお世話になっております。

データベース上に持っているコードの桁数を拡張する必要に迫られています。
本来であれば、データベースの桁数を増やして関連するプログラムを見直して、という流れになるのですが、
使用している画面や帳票の数が多く、レイアウトの調整が要るのですが、殆どは圧縮されたコードのままでも問題ないため、桁数を圧縮する何等かの方法はないかなと考え初めました。
数字だけであれば、10進→16進に変換すれば桁数が圧縮できる可能性があると思うのですが、英数が混じる、いわば36進に相当する文字をそれ以上に圧縮するなんてことは可能なのでしょうか?

A 回答 (5件)

36 進数 11 桁のデータ量を、


x 進数 8 桁で表すなら

36^11 = x^8
x = 36^(11/8) = 138.01 ...

139 個以上の文字を表すためには、
ASCII 由来の図形文字である 21-FE の 94 個では足りないので、
別に 45 個が必要になります。

もし文字コードが Unicode ならば、
ラテン補助文字である U+00C0-00FF の範囲で探しましょう。
ただし U+00D7 の様な記号は除外すべきかも

もし文字コードが JIS X 0201 ならば
カナ文字である A1-DD の範囲で探しましょう。
ただし A7 の様な小書きは除外すべきかも

参考)
https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E …
https://ja.wikipedia.org/wiki/JIS_X_0201

余談ではありますが、
ご質問のような場合ですと、データベースに拡張分の項目を追加して、必要な場合だけ既存分と拡張分を結合したコード体系にすべきかと考えます。
    • good
    • 1
この回答へのお礼

有難うございました。
今使っている言語では無理そうなことが判りましたので、ユニークになる状態でのコード短縮化を検討してみます。

お礼日時:2022/07/25 15:31

>11桁を8桁に変換したいのですが、文字数が足りないような感じです。


94進数では、文字数が足りないですね。
どうしてもということであれば、No1の方の64ビット整数に変換する方法しかないですね。バイナリーデータなので、そのまま表示はできないかと思います。
    • good
    • 0
この回答へのお礼

有難うございました。
今使っている言語では無理そうなことが判りました。

お礼日時:2022/07/02 10:00

rubyのカテゴリで質問されていますが、rubyでの実装を想定されているのでしょうか。

    • good
    • 0
この回答へのお礼

コメントありがとうございました。
すみません。間違えていました。プログラミング全般のつもりだったのですが、無意識のうちにカテゴリが違っていました。
実装したいのは、レガシー言語のRPGです。若い人は知らないと思います。
rubyでも難しければ、絶対に無理そうなことは判ってきました。

お礼日時:2022/06/28 19:33

>英数が混じる、いわば36進に相当する文字をそれ以上に圧縮するなんてことは可能なのでしょうか?



ASCIIの0x20~0x7Fを使用した96進数という考え方がありますが、
0x20(空白)と0x7F(DEL)は、使用しないで、94進数なら印字可能文字で構成できます。
36進数の何文字を何文字に圧縮したいのでしょうか。
それによって94進数にして効果があるかどうかがきまります。
    • good
    • 0
この回答へのお礼

コメントありがとうございました。
変換サイトを見つけて入力してみました。
11桁を8桁に変換したいのですが、文字数が足りないような感じです。

お礼日時:2022/06/28 19:30

こんばんは



>数字だけであれば、10進→16進に変換すれば桁数が
>圧縮できる可能性があると思うのですが
整数値前提で良ければ、2進数そのままで使えば1バイトで256。
8バイトあれば符号付でも100京を超えます。(=18桁超)
読み替えやすく、4ビットで10進一桁とかにすれば、8バイトで16桁。

まぁ、やめといた方が良いとは思いますけれど・・・
    • good
    • 0
この回答へのお礼

有難うございました。
大変そうなことは判りました。

お礼日時:2022/06/28 19:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!