ホームページ >バックエンド開発 >PHPチュートリアル >PHP はシリアル ポートを介したテキスト メッセージの送信を実装し、PHP シリアル ポートはテキスト メッセージを送信します_PHP チュートリアル
テクノロジーの進歩により、テキスト メッセージの送受信の分野では、ブロック モード、テキストの 3 つのモードが生み出されました。 AT コマンドに基づく MODE、および AT コマンドに基づく PDU MODE。このうち、TEXT MODE は比較的シンプルで、多くの Nokia 携帯電話がこのモードをサポートしています。ほとんどの Siemens 携帯電話は PDU モードのみをサポートします。 PDU モードは、テキスト メッセージを送受信する方法であり、テキスト メッセージのテキストは 16 進数でエンコードされて送信されます。現在、PDU が BLOCK MODE に代わっています。
SMS は Etsi によって開発された仕様 (GSM 03.40 および GSM 03.38) です。 7 ビット エンコードを使用すると最大 160 文字を送信できますが、8 ビット エンコードでは最大 140 文字を送信できますが、16 ビット エンコードを使用すると最大 140 文字を送信できます。最大 70 文字。ほとんどの携帯電話で表示できる Unicode (UCS2) テキスト情報を表示するために使用されます。
今日は、PDU MODE、UCS2 エンコーディングについて説明します。これは、英語または中国語に関係なく、最大 70 文字しか送信できないことを意味します。
「こんにちは」というメッセージを送信するとします。送信する前に、SIM カードが配置されている SMS センター番号 (China Mobile の SMS センター番号など) を知っておく必要があります:
受信した携帯電話番号: 13638197275
杭州SMSセンター番号: 13800571500
メッセージ内容: こんにちは
このテキスト メッセージを送信するには、電話機はエンコード後に実行し、次の文字列になります。
0891683180501705F011000D91683136187972F5000800044F60597D
この一連のコードを最初から最後まで説明してください:
08 – SMS センター番号の長さを指します。つまり、(91)+(683180501705F0) を 2 で割った長さ、つまり 08 = (2+14)/2
91 – SMS センター番号のタイプを指します。 91 は、TON/NPI が International/E.164 標準に準拠していることを意味します。これは、数値の前に「+」記号を追加する必要があることを意味しますが、91 が最も一般的に使用されます。
683180501705F0 - SMS センター番号。位置に若干の処理が行われているため、実際の数値は 8613800571500 になります (文字 F は偶数の長さを補うために追加された文字です)。
11 - ファイルヘッダーバイト
00-情報タイプ(TP-MESSAGE-Reference)
0d -着信番号の長さ ×
91 - 着信番号の種類
実際、実際の処理では、通常、プログラム内で 11000D91 をハードコーディングします。これは、中国ではこれらのデータが変更されないためです。
683136187972F5 - 着信番号がシフトされており、実際の番号は「8613638197275」です。
上記の (00) + (0D) + (91) + (683136187972F5) は、テキスト メッセージ全体の宛先アドレス (TP-Destination-Address) の 2 番目の部分を構成します。
続けて...
00 - プロトコル識別 TP-PID、通常は 00 です
08 - データコーディングスキーム TP-DCS (TP-Data-Coding-Scheme)、前述の USC2 (16 ビット) データコーディングを使用
00 - 有効期間 TP-VP (TP-Valid-Period)
04 - 長さ TP-UDL (TP-User-Data-Length)、メッセージ長/2 の 16 進数の 04 です
4F60597D テキスト メッセージの内容は次のとおりです。実際の内容は次のとおりです: 「こんにちは」
上記の状況に基づいて、SMS エンコード用のプログラム スクリプトを作成できます。
1. SMS センター番号「+8613800571500」から + 記号を削除して、長さが偶数であるかどうかを確認します。そうでない場合は、最後に F を追加します。
=>「8613800571500F」
=>「683108501705F0」
3. SMS センター番号の前に文字 91 を追加します。91 は国際化を意味します
。
=>「91683108501705F0」
4. 長さを計算し、結果を 2 で割って、2 桁の 16 進文字列にフォーマットします、16 / 2 = 8 => “08”
=>「0891683108501705F0」
2. 携帯電話番号の処理:
1. 携帯電話番号 +8613638197275 から + 記号を削除し、長さが偶数であるかどうかを確認します。そうでない場合は、最後に F を追加します。
=>「8613638197275F」
2. 携帯電話番号の奇数桁と偶数桁を入れ替えます。
3. ショートメッセージの処理:
1. 文字列を Unicode コードに変換します。
「こんにちは」のUnicodeコードは4F60597Dです
2. 長さを 2 で割って、2 つの 16 進数を保持します。つまり、4F60597D = 8 / 2 => “04”、
=>「044F60597D」
4. 組み合わせ
1. 携帯電話番号の前に文字列 11000D91 を追加します (1100: 固定、0D: 携帯電話番号の長さ (+ 記号を除く、16 進数で表現)、91: 送信
)
携帯電話へは91、PHSへは81)、
つまり、11000D91 + 683136187972F5
=>11000D91683136187972F5
2. 携帯電話番号の後に 000800 を追加し、先ほどのテキスト メッセージの内容を 000800 と書きます。
つまり、11000D91683136187972F5 + 000800 + 044F60597D
=>11000D91683136187972F5000800044F60597D
3. メッセージ全体の長さを 2 で割って、2 桁の 10 進数にフォーマットします
つまり、11000D91683136187972F5000800044F60597D => 38 ビット / 2 => 19
5.それで送信する内容はです。
わかりました
AT+CMGS=19
> #テキストメッセージのコンテンツコードを入力してください
リーリー
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。 。