メーターポイント管理番号( MPAN、供給番号、S番号とも呼ばれる)は、英国で個々の住宅などの電力 供給ポイントを一意に識別するために使用される21桁の参照番号です。このシステムは、電力会社の競争環境の創出を支援するために1998年に導入され、消費者が供給業者を簡単に切り替えられるようになり、管理も簡素化されました。名前からMPANが特定のメーターを指すことが示唆されますが、MPANには複数のメーターが関連付けられる場合もあり、[1]メーターのない供給の場合はメーターがまったく関連付けられていないこともあります。ネットワークオペレータ(DNO)から電力を受け取る供給には輸入MPANがあり、 DNOネットワークにフィードバックする発電およびマイクロ発電プロジェクトには輸出MPANが与えられます。[1]
ガス供給の場合、これに相当するのはメーター ポイント参照番号であり、非家庭顧客の場合、水道/廃水の場合、これに相当するのは供給ポイント ID です。
構造
MPANは通常、コア部分とトップラインデータの2つのセクションに分かれています。コア部分は最後の13桁で、固有の識別子です。トップラインデータは供給品の特性に関する情報を提供し、供給者の責任となります。
電気料金請求書にはMPAN全体を記載する必要があります(上段と下段のボックスは通常揃っていません)。[2]

コアデータは2行目、補足データは1行目にあります。最下行の最後の桁のみがチェックデジットとなります。
プロファイルクラス(PC)
完全なMPANの最初の2桁はプロファイルクラスを反映します。[3]
| 00 | 30分ごとの供給(輸入と輸出) |
|---|---|
| 01 | 国内無制限 |
| 02 | 2つ以上の料金の国内エコノミーメーター |
| 03 | 非国内無制限 |
| 04 | 非国内経済 7 |
| 05 | 非家庭用、最大需要(MD)記録機能付き、負荷率(LF)が20%以下 |
| 06 | MD録音機能付き、LFが30%以下、20%を超える非国産品 |
| 07 | MD録音機能付き、LFが40%以下、30%を超える非国産品 |
| 08 | 国内向け以外、MD 録音機能付き、LF が 40% を超えるもの(30 分間隔以外のすべての輸出 MSID も対象) |
プロファイルクラス00の供給は30分単位(HH)で計測され、毎日30分ごとに電力消費量を記録します。その他のプロファイルクラスの供給は30分単位ではない(NHH)計測です。NHH供給は、以下の場合にHHにアップグレードする必要があります。[4]
最も需要が高い 3 か月間の最大月間電力需要の平均が、次のいずれかである計測システム:
- a. 過去12か月間、または
- b. 直近の需要の大幅な変化以降の期間(いずれか短い方)
100kWを超える。
世帯データはメーターによって記録され、現場でのダウンロード、またはGSM、SMS、GPRS、電話回線などのリモート通信方法によって収集されます。[2]
国内NHH輸入MPANのプロファイルクラスは常に01または02です。国内NHH輸出MPANにはプロファイルクラス08が割り当てられます。[3]
メータータイムスイッチコード(MTC)
MTCは、メーターが持つ様々なレジスタ(単一レート、昼夜分割、季節による時間帯など)を反映した3桁のコードです。[5] [6]
| 001~399 | DNO固有 |
| 400~499 | 予約済み |
| 500~509 | 関連する計量システムのコード – 業界全体で共通 |
| 510~799年 | 関連する計量システムのコード – DNO固有 |
| 800~999年 | 業界共通のコード |
線路損失係数クラス(LLFC)
線路損失係数クラス(LLFC)[7]は、MPANの配電系統利用料金(DUoS)を識別するために使用される英数字コードです。この数値は、出口点への供給に使用される配電インフラの量と、ケーブルや変圧器などの加熱によって失われるエネルギー量の両方を反映しています。[2]
コア
MPANコアはMPANの最後の13桁で、出口ポイントを一意に識別します。2桁のディストリビューターID、それに続く8桁の一意の識別子、さらに2桁の数字と1桁のチェックディジットで構成されます。
販売代理店ID
グレートブリテンは14の配電エリアに分かれています。各エリアには、配電網運営会社(DNO)と呼ばれる単一の会社が配電免許を有しています。[8]配電網運営会社は、ナショナルグリッドから顧客がいる出口ポイント(それぞれ固有のMPANと複数のメーターを持つ場合があります)まで電力を実質的に輸送します。配電網の所有者は、ネットワーク内での電力輸送に対して電力供給会社に料金を請求します。DNOの認可地域は、かつて国有化された電力委員会(Electric Boards)と同じ地理的範囲です。[8]
| ID [8] | 名前 | オペレーター | 電話番号 | 市場参加者ID [9] | GSPグループID [10] |
|---|---|---|---|---|---|
| 10 | イングランド東部 | 英国電力ネットワーク | 0800 029 4285 | EELC | _A |
| 11 | イースト・ミッドランズ | ナショナルグリッド(旧ウェスタンパワーディストリビューション) | 0800 096 3080 | EMEB | _B |
| 12 | ロンドン | 英国電力ネットワーク | 0800 029 4285 | ロンドン | _C |
| 13 | マージーサイドと北ウェールズ | SPエネルギーネットワーク | 0330 10 10 444 | マンW | _D |
| 14 | ウェスト・ミッドランズ | ナショナルグリッド(旧ウェスタンパワーディストリビューション) | 0800 096 3080 | ミデ | _E |
| 15 | イングランド北東部 | ノーザンパワーグリッド | 0800 011 3332 | ニーブ | _F |
| 16 | イングランド北西部 | 北西部電力 | 0800 048 1820 | ノルウ | _G |
| 17 | スコットランド北部 | スコットランドおよび南部電力ネットワーク | 0800 048 3516 | ハイド | _P |
| 18 | スコットランド南部 | SPエネルギーネットワーク | 0330 10 10 444 | 吐き捨て | _N |
| 19 | イングランド南東部 | 英国電力ネットワーク | 0800 029 4285 | シーブ | _J |
| 20 | 南イングランド | スコットランドおよび南部電力ネットワーク | 0800 048 3516 | 南 | _H |
| 21 | 南ウェールズ | ナショナルグリッド(旧ウェスタンパワーディストリビューション) | 0800 096 3080 | スワエ | _K |
| 22 | イングランド南西部 | ナショナルグリッド(旧ウェスタンパワーディストリビューション) | 0800 096 3080 | SWEB | _L |
| 23 | ヨークシャー | ノーザンパワーグリッド | 0800 011 3332 | イェルグ | _M |
特定の地域に免許を有する上記の配電網運用者に加え、独立配電網運用者(IDNO)も存在します。IDNOは、主に既存の配電網に接続されたネットワーク拡張(例えば、新規住宅開発への供給)である配電網を所有・運用しています。
スコティッシュ・ハイドロ・エレクトリック・パワー・ディストリビューションは、南スコットランドでもIDNOとして配電サービスを提供しており、サザン・エレクトリック・パワー・ディストリビューションはイングランドとウェールズの他の地域でもIDNOサービスを提供しています。他のIDNOには「拠点」地域がありません。[11]
| ID [引用が必要] | 名前 | ライセンシー[12] | 市場参加者ID [9] |
|---|---|---|---|
| 24 | GTC | インディペンデント・パワー・ネットワークス・リミテッド | IPNL |
| 25 | ESPエネルギー | ESPエネルギー | レン |
| 26 | エネルギー / ラストマイル | ラストマイル電力有限会社 | GUCL |
| 27 | GTC | 電力ネットワーク会社 | ETCL |
| 28 | EDF IDNO | 英国パワーネットワークス(IDNO)株式会社 | EDFI(現在は廃止) |
| 29 | ハラクストン・エナジー・ネットワークス株式会社 | ハール | |
| 30 | リープ電力ネットワークス株式会社 | ペンL | |
| 31 | 英国パワーディストリビューションズ社 | 英国警察 | |
| 32 | エネルギー資産ネットワーク | エネルギーアセットネットワークス株式会社 | UDNL |
| 33 | EPN | エクリプスパワーネットワークス株式会社 | GGEN |
| 34 | マーフィー電力分配有限会社 | MPDL | |
| 35 | フルクラム電力資産 | フルクラム・エレクトリシティ・アセットズ株式会社 | フィール |
| 36 | ヴァッテンフォール・ネットワークス | ヴァッテンフォール・ネットワーク・リミテッド | 付加価値税 |
| 37 | フォーベリー・アセッツ・リミテッド | フォーベリー・アセッツ・リミテッド | フォーブ |
| 38 | インディゴパワーリミテッド | インディゴパワーリミテッド | インディ |
| 39 | スクワイア・エナジー・メータリング社 | スクワイア・エナジー・メータリング社 | STRK |
| 40 | ユーティリティ・アセット・リミテッド | ユーティリティ・アセット・リミテッド | ウタル |
| 42 | 高度な電力ネットワーク | 高度な電力ネットワーク | AENL |
| 43 | IDCS株式会社 | IDCS株式会社 | IDCS |
| 45 | オーロラ・ユーティリティーズ・リミテッド | オーロラ・ユーティリティーズ・リミテッド | アウロ |
| 46 | エイディエン・リミテッド | エイディエン・リミテッド | アイディ |
| 47 | バイタル・エナジー・パワー・ネットワークス | バイタル・エナジー・パワー・ネットワークス | VEPN |
| 48 | E.ON UK ネットワークアセットリミテッド | E.ON UK ネットワークアセットリミテッド | イーオン |
| 51 | AGRネットワークス株式会社 | AGRネットワークス株式会社 | AGRN |
MPAN状態
MPAN によって識別される供給は、切断、電源切断、稼働中、新規の 4 つの状態のいずれかになります。
- 切断済み: サービス ケーブルが取り外されており、MPAN は再利用されません。
- 電源切断:サービスケーブルは設置されていますが、ヒューズは取り外されています。メーターは配電網に接続されたままですが、電気は使用できません。
- 通電中:サービスケーブルとヒューズは両方とも接続されています。電源は完全に稼働しています。
- 新規:新しいMPANが生成されましたが、先頭行(プロファイルクラスとメータータイムスイッチコードで構成される補足データ)がまだ完了していません。サービスケーブルは設置済みの場合と未設置の場合があります。
これらの用語は決して標準化されていません。例えば、切断された電源は「デッド」電源と呼ばれることもあります。
MPANのエクスポート
MPANの大部分は輸入MPANであり、エネルギーはそこで消費されます。ただし、供給者が配電網に輸出する場合は、輸出MPANが発行されます。供給者が輸入と輸出の両方を行う場合は、輸入MPANと輸出MPANの両方が発行されます。
マイクロジェネレーション
以前は、輸出MPANには30分計に適合したメーターの設置が義務付けられていました。2003年以降、出力30kW以下のマイクロジェネレーションプロジェクトでは、配電網への輸出電力を計測するための30分計以外のメーターの設置が可能になりました。普及は遅く、最初のマイクロジェネレーション輸出MPANが発行されたのは2005年6月でした。一部の供給業者は、輸出MPANの収益が少額であるため、MPASへの登録を怠る場合があります。[要出典]
固定価格買い取り制度の廃止を受けて、2020年1月にOfgemはスマート輸出保証(SEG)制度を導入しました。この制度では、輸出MPANが割り当てられ、サプライヤーが顧客に低炭素エネルギーの輸出に対して支払いを行うことができます。[13] [14]
30kWを超える輸出電力は、30分ごとにメーターで計測する必要があります。市場全体の30分単位協定(MHHS)の一環として、すべての輸出電力消費量は30分単位で登録および決済する必要があります。[要出典]
メーター式供給ポイント
計量供給点(MSP)とは、顧客の消費量を測定するメーターが設置されている地点です。したがって、MSPは配電網事業者の供給またはビルネットワーク事業者の横引きケーブルが終端し、顧客の機器が始まる地点でもあります。供給のMSPを確実に確立するには、MPANをメーターのシリアル番号に関連付ける必要があります。
MPANは1つのメーターシリアル番号に関連付けられるのが一般的ですが、多対多の関係になる場合もあります。例えば、1つのメーターが輸入用と輸出用の両方のMPANに関連付けられている場合や、1つのMPANが3つの異なるメーターで計測されている場合があります。
計量実践規範
| コード | 範囲 | 構成 |
|---|---|---|
| COP10 | 72kW未満 | HH全流速計1台設置。2009年2月に導入。[16] |
| COP5 | 1MW未満 | HHメーター1台設置。 |
| COP3 | 1MWから10MW | メインメーターとチェックメーターの2つのメーターが設置されており、どちらも同じ負荷を記録しています。メインメーターは課金に使用されます。 |
| COP2 | 10MWから100MW | COP3 と同様に 2 つのメーターが設置されていますが、より高精度のクラスのメーターです。 |
| COP1 | 100MW以上 | 英国でこのレベルの施設はほとんどなく、通常は発電所とNational Gridとの接続です。 |
計量されていない供給
小規模で予測可能な供給は計量されない可能性があります。[17]例としては、街灯、交通信号、標識、ボラード、電話ボックス、CCTV、広告ディスプレイなどがあります。
メーターなしの接続を介して配電網に接続される機器は、通常、消費電力が500ワットを超えてはならず、予測可能な動作をし、エンドユーザーの要求に応じて手動でオン/オフを切り替えるような仕組みであってはなりません。一般的に、機器は24時間稼働して電力供給を受けているか、街灯のように光電管によって制御されます。
非計量供給の正確かつ最新の在庫を維持し、接続された機器へのすべての変更を 1 か月以内に UMSO (非計量供給オペレーター) に通知することは、お客様の責任です。
大規模な地方自治体は、通常、需要が100kWを超えるメーターなしの供給があり、メーターなしのエネルギーを30分ごとに取引する必要があります。そのために、メーター管理者[18] [19]を雇用し、光電制御ユニット(PECU)アレイからの毎日のデータを使用してエネルギー消費を計算します。PECUアレイは、自治体が街灯や交通信号で使用する光電セルの代表的な番号を保持するデバイスです。[20]メーターなしのエネルギーを30分ごとに取引することにより、自治体は申告したメーターなしの機器が消費したエネルギーに対して正確に支払います。また、データは毎日ダウンロードされるため、自治体は年間を通じて季節ごとの毎日の照明レベルの変化を反映してエネルギー請求書が変動することを確認できます。
ただし、メーターなしの供給が30分単位以外で取引されている場合、UMSOはEAC(推定年間消費量)を計算する責任を負います。これは、機器の回路ワット数と年間稼働時間を考慮した簡単な計算式を用いて行われます。例えば、1日24時間稼働している機器の年間稼働時間は8766時間です。例えば、回路ワット数24のCCTVカメラの場合、EACは回路ワット数×年間稼働時間を1000で割った値で210.384kWhとなります。Ofgemが市場全体の30分単位決済(MHHS)を進めることを決定した結果、2024年4月以降の新規メーターなし供給はすべて30分単位となり、既存の30分単位ではないメーターなし供給は2024年中に30分単位取引に移行します。
機器が街路照明の場合、30分間隔以外の照明にも同様の手順が適用されます。ただし、各光電セルには年間点灯時間が割り当てられており、点灯方法と点灯時間を示すため、年間点灯時間は異なります。これらの年間点灯時間はElexonによって設定されたものであり、お客様がUMSOと現地で合意したものではありません。
EAC計算が完了すると、EAC証明書が顧客の指定電力供給業者に請求用に提供され、EACの電子コピーが指定データ収集業者に送付されます。DNOは、顧客の未計量機器への電力供給に対して、電力供給業者に 配電系統利用料金を請求します。
標準決済構成(SSC)
30分間隔以外の電力供給には、標準決済設定(SSC)と呼ばれる4桁のコードが割り当てられています。このコードには、メーターのレジスタ数と、各レジスタが電力使用量を記録する時刻が指定されています。レジスタが記録する時刻は、5桁のタイムパターンレジーム(TPR)コードで指定されます。例えば、SSC 0943の供給には、TPR 00404と00405の2つのレジスタがあります。TPRレジスタ00404は、01:00から02:30までと08:00から23:30までの電力を記録し、00405は残りの時間帯を記録します。[21]
メーターポイント管理システム
各DNO は、各 MPAN について次の情報を保持するメーター ポイント管理システム (MPAS) を運用しています。
- サプライヤー
- データコレクター(DC)
- データ アグリゲータ (DA)
- メーターオペレーター(MOP)またはメーターなし世帯のメーター管理者
- お客様
- 出口の住所
- 関連MPAN
- MPAN状態
- プロファイルクラス(PC)
- 線路損失係数クラス(LLFC)
- メータータイムスイッチクラス(MTC)
- GSPグループ
MPRSは、すべてのDNOにMPASシステムを実装するソフトウェアパッケージの名前です。[22] MPRSはほとんどのDNOで使用されているため、MPASという用語と同じ意味で使用されることがよくあります。
エコーズ
ECOES(旧称:電力中央オンライン照会サービス)は、現在電力照会サービス(EES)と呼ばれているウェブサイトで、ユーザーや業界関係者が13桁のMPAN(電力会社管理番号)、メーターのシリアル番号、郵便番号などを使って、供給状況(過去および現在)を検索することができます。ユーザーは、供給に関する幅広いデータ(住所、メーターの詳細、現在の通電状況、そして指定事業者(供給業者、配電業者、電力会社、電力供給監督局、電力会社、配電事業者)など)を確認できます。このサイトには、供給業者からメーターシステムに関する情報が提供されています。[23]
このサービスにアクセスするために登録できるのは、非国内ユーザー(プロファイルクラス1または2以外の有効なMPANを2つ持つユーザー)のみです。[24]
チェックデジット係数
チェックディジット
MPANの最後の桁はチェックデジットであり、前の12桁(コア桁)をモジュラス11テストで検証します。チェックデジットは次のように計算されます。
- 最初の数字を3倍する
- 2桁目の数字に次の素数を掛ける(5)
- これを各桁ごとに繰り返します(このアルゴリズムでは素数リストから 11 を除外します)
- これらの製品をすべて合計します
- チェックディジットは11を法として10を法とした合計である。[25]
| MPAN検証の例 |
|---|
Java のアルゴリズムは次のとおりです。
int checkDigit ( String toCheck ) { int [] primes = { 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 }; int sum = 0 ; for ( int i = 0 ; i < primes . length ; i ++ ) { sum += Character . getNumericValue ( toCheck . charAt ( i )) * primes [ i ] ; } return sum % 11 % 10 ; }
Matlabの場合: function check = checkdigits ( MPANCore ) % MPANCore は 13 桁の文字列のセル配列です。% Check は MPANCore と同じサイズのブールベクトルです。% (0.05 秒で 100,000 個の MPAN。)
core = double ( char ( MPANCore ) ' ) - 48 ; c = core ( 1 : 12 ,: ); p = [ 3 5 7 13 17 19 23 29 31 37 41 43 ] ' * ones ( 1 , size ( c , 2 ) ); m = mod ( mod ( sum ( p .* c ), 11 ), 10 ); k = core ( 13 ,: ); check = m == k ;
Pascal / Delphiの場合: function CheckDigit ( MPANCore : Byteの配列) : Integer ; const Primes : Byteの配列[ 0 .. 11 ] = ( 3 、5 、7 、13 、17 、19 、23 、29 、31 、37 、41 、43 ) ; var i : integer ; begin Result := 0 ;
i := 0 ~11 の場合、 Result := Result + ( MPANCore [ i ] * Primes [ i ])を実行します。
結果:=結果mod 11 mod 10 ;終了;
Ruby の場合: # mpanは文字列です
def check_digit ( mpan ) primes = [ 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 ] ( 0 .. 11 ) . inject ( 0 ) { | sum , n | sum + ( mpan [ n , 1 ] . to_i * primes [ n ] ) } % 11 % 10 end
Visual Basic の場合: パブリック関数mpancheck ( mpan As String ) As Boolean
' Michael Diarmid (EDF)
' 2010年4月8日更新 MD ' MPANが有効な場合はTrue / Falseを返します。エラーの場合はGoTo invalを返します。
Dim c As Variant 、sum As Integer 、i as Byte c = Array ( 0 、3 、5 、7 、13 、17 、19 、23 、29 、31 、37 、41 、43 )
i = 1から12までsum = sum + ( Mid ( mpan , i , 1 ) * c ( i ))次のi
Right ( mpan , 1 ) = (( sum Mod 11 ) Mod 10 )の場合、 mpancheck = True 、それ以外の場合、 inval : mpancheck = False 、End If End Function
VisualBasic.Net 2010 の場合: パブリック関数mpancheck ( mpan As String ) As Boolean
' Michael Diarmid (EDF)
' 2010 年 8 月 4 日更新 MD ' MPAN が有効な場合は True / False を返します' Tym Huckin (2012 年 3 月 16 日) により VB 2010 用に改訂
エラー時にGoToが無効
Dim c As Object 、sum As Integer
c = { 0 、3 、5 、7 、13 、17 、19 、23 、29 、31 、37 、41 、43 }からの新しいリスト(整数)
i = 1から12までsum = sum + ( Mid ( mpan , i , 1 ) * c ( i ))次のi
sRight ( mpan , 1 ) = (( sum Mod 11 ) Mod 10 )の場合、True を返す。それ以外の場合、 inval : Falseを返す。
End Function Public Function sRight ( sSTRING As String , iLEN As Integer ) As String Dim sRET As String = "" Try If iLEN >= Len ( sSTRING ) Then sRET = sSTRING End If sRET = Mid ( sSTRING , Len ( sSTRING ) - ( iLEN - 1 ), iLEN ) Catch ex As Exception sRET = "" End Try Return sRET
終了関数
または、VB6 互換性ライブラリの使用を避けた VB.Net 2010: ''' <summary>
''' MPAN 番号を検証します''' </summary> ''' <param name="mpan">チェック ディジットを含む MPAN 番号の最後の 13 桁以上が、''' 文字列として表現されます</param> ''' <returns>有効な場合は True、それ以外の場合は False</returns> ''' <remarks>2012 年 5 月、VB6 互換性ライブラリの使用を避けて、.Net 4.0 クライアント プロファイル用に Martin Milan によって作成されました</remarks> Public Function MPANIsValid ( mpan As String ) As Boolean ' 初期条件を設定します。Dim validationResult As Boolean = False If mpan . Length > 12 Then 'チェック ディジットを Integer 変数に読み取ります。Dim intCheckDigit As Integer If Integer . TryParse ( mpan . Substring ( mpan . Length - 1 ), intCheckDigit ) Then Dim strTest As String = mpan . Substring ( mpan . Length - 13 , 12 ) Dim intPrimes () As Integer = { 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 } Dim productTotal As Integer = 0 Dim blnError As Boolean = False For i As Integer = 0 To 11ステップ1 Dim intTestDigit As Integer If Integer . TryParse ( mpan . Substring ( i , 1 ),intTestDigit ) Then productTotal += ( intTestDigit * intPrimes ( i ))そうでなければblnError =
True
Exit For End If Next If Not blnError Then validationResult = (( productTotal Mod 11 Mod 10 ) = intCheckDigit ) Else validationResult = False ' 解析エラーのため。 End If End If End If Return validationResult End Function
C#の場合: /// <summary>
/// MPAN 番号を検証します。/// </summary> /// <param name="mpan">チェック ディジットを含む MPAN 番号の最後の 13 桁以上が文字列として表現されます。</param> /// <returns>有効な場合は True、それ以外の場合は false。</returns> public static bool MpanIsValid ( string mpan ) { // 初期条件を設定します。bool validationResult = false ;
if ( mpan . Length > 12 ) { // チェック ディジットを Integer 変数に読み取ります。int intCheckDigit = 0 ; if ( int . TryParse ( mpan . Substring ( mpan . Length - 1 ), out intCheckDigit )) { string strTest = mpan . Substring ( mpan . Length - 13 , 12 ); int [] intPrimes = { 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 }; int productTotal = 0 ; bool blnError = false ;
for ( int i = 0 ; i <= 11 ; i ++ ) { int intTestDigit = 0 ; if ( int . TryParse ( strTest . Substring ( i , 1 ), out intTestDigit )) { productTotal += ( intTestDigit * intPrimes [ i ] ); } else { blnError = true ; break ; } }
if ( ! blnError ) { validationResult = (( productTotal % 11 % 10 ) == intCheckDigit ); } else { validationResult = false ; // 解析エラーのため。 } } }
検証結果を返します; }
Excel 365 の式として: セルA1のMPAN
= IF ( RIGHT ( MOD ( SUM ( MID ( A1 , SEQUENCE ( 12 ), 1 ) * { 3 ; 5 ; 7 ; 13 ; 17 ; 19 ; 23 ; 29 ; 31 ; 37 ; 41 ; 43 }), 11 )) = RIGHT ( A1 ), "正しい" , "無効なMPAN" )
Pythonの場合: def check_digit ( mpan ): """MPAN 桁をチェックします。
引数:
mpan -- チェックデジットを除くMPAN番号の最初の12桁。
"""
return sum ( prime * int ( digit ) for prime , digit in \
zip ([ 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 ], mpan )) % 11 % 10
PL/SQLの場合: 作成または置換function mpan_check ( mpan in varchar2 ) return boolean is --CDP ATKINSON res integer := 0 ; TYPE prime_tab IS VARRAY ( 12 ) OF integer ; primes prime_tab := prime_tab ( 3 、5 、7 、13 、17 、19 、23 、29 、31 、37 、41 、43 ); begin for i in 1..12 loop res := res + to_number ( substr ( mpan 、i 、1 ) ) * primes ( i ); end loop ; return to_char ( mod ( mod ( res 、11 ) 、10 )) = substr ( mpan 、13 、1 ); end mpan_check ;
JavaScript の場合: 関数checkMPAN ( mpan ) { var primes = [ 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 ];変数合計= 0 ; var m = mpan 。toString ();
if ( m . length - 1 === primes . length ) { for ( var i = 0 ; i < primes . length ; i ++ ) { sum += parseInt ( m . charAt ( i )) * primes [ i ]; } return sum % 11 % 10 === parseInt ( m . charAt ( 12 )); }
falseを返します; }
PHP の場合: 関数 checkMPAN ( $ mpan )
{
$ primes = array ( 3、5、7、13、17、19、23、29、31、37、41、43 ) ; $ sum = 0 ; $ mpan = str_split ( $ mpan ) ;
if (( count ( $mpan ) - 1 ) == count ( $primes )) {
for ( $i = 0 ; $i < count ( $primes ); $i ++ ) {
$sum += $mpan [ $i ] * $primes [ $i ];
}
return (( $sum % 11 % 10 ) == end ( $mpan )) ? true : false ;
} else {
return false ;
}
}
SQL Server の場合: CREATE FUNCTION is_valid_mpan ( @mpan VARCHAR ( 50 ) ) RETURNS INT AS BEGIN --Tim Foster (2013-01-04) DECLARE @is_mpan INT , @x INT = 1 , @sum INT = 0 DECLARE @arr TABLE ( id INT IDENTITY ( 1 , 1 ), val INT ) INSERT INTO @arr ( val ) VALUES ( 3 ),( 5 ),( 7 ),( 13 ),( 17 ),( 19 ),( 23 ),( 29 ),( 31 ),( 37 ),( 41 ),( 43 ) WHILE @x <= 12 BEGIN SELECT @sum = @sum + ( SUBSTRING ( @mpan , @x , 1 ) * val ) FROM @arr WHERE id = @x SELECT @x = @x + 1 END IF RIGHT ( @mpan , 1 ) = (( @sum % 11 ) % 10 ) BEGIN SELECT @is_mpan = 1 END ELSE BEGIN SELECT @is_mpan = 0 END
戻る@is_mpan終了
MySQLの場合: CREATE DEFINER = `root` @`%` FUNCTION `is_valid_mpan` ( mpan varchar ( 13 )) RETURNS int ( 11 ) begin
is_mpan INTを宣言します。x INTを宣言します。DECLARE合計INT ; ret intを宣言します。x = 1を設定します。合計= 0を設定します。存在しない場合は一時テーブルを作成します。arr SELECT 1 `id` 、3 `val` union all SELECT 2 `id` 、5 `val` union all SELECT 3 `id` 、7 `val` union all SELECT 4 `id` 、13 ` val` union all SELECT 5 `id` 、17 `val` union all SELECT 6 `id` 、19 `val` union all SELECT 7 `id` 、23 `val` union all SELECT 8 `id` 、29 `val` union all SELECT 9 `id` 、31 `val` union all SELECT 10 `id` 、37 `val` union all SELECT 11 `id` 、41 `val` union all SELECT 12 `id` 、43 `val` ; x <= 12の場合、DO SELECT ( SUBSTRING ( mpan , x , 1 ) * val ) into ret FROM arr WHERE id = x ; sum = sum + retに設定し、x = x + 1に設定し、END while ; IF RIGHT ( mpan , 1 ) = (( sum % 11 ) % 10 )
then は
is_mpan = 1に設定し、ELSE はis_mpan = 0に設定し、end if はTEMPORARYテーブルarrを削除します。RETURN is_mpan を返します。
終わり;
Swift 3 では次のようになります: func isValid ( mpan : String ) -> Bool { let primes = [ 3 , 5 , 7 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 ] let chars = Array ( mpan.chars ) .map ( { Int ( String ( $ 0 ) )}). flatMap ( { $0 } ) return zip ( primes , chars ) .reduce ( 0 ) { $ 0 + $ 1.0 * $ 1.1 } % 11 % 10 == chars.last ! }
Apex (Salesforce) の場合: /**
* @description MPANを検証します。2018年6月 Adam Dry 著。Apexバージョン43
* @param mpan 末尾のチェックデジットを含む13桁のMPAN
*/
public Boolean mpanIsValid ( String mpan ) {
リスト<整数> primes =新しいリスト<整数> { 3 、5 、7 、13 、17 、19 、23 、29 、31 、37 、41 、43 };
//チェックディジットをInteger変数に読み込みます。Integer checkDigit = Integer.valueOf ( mpan.right ( 1 ) ) ;
文字列strTest = mpan . substring ( 0 , 12 );整数productTotal = 0 ;
for ( Integer i = 0 ; i <= 11 ; i ++ ) { Integer testDigit = Integer . valueOf ( strTest . Substring ( i , i + 1 )); productTotal += ( testDigit * primes [ i ] ); }
整数computedCheck = Math.mod ( Math.mod ( productTotal , 11 ) , 10 ) ;ブール値validationResult = ( computedCheck == checkDigit ) ;
検証結果を返します; }
|
参照
外部リンク
- メーター タイムスイッチ コードの具体的な定義については、MRASCo ドキュメント ページを参照してください。
- ECOES(電力中央オンライン問い合わせサービス)
- MPANチェックディジットアルゴリズムの実装
参考文献
- ^ ab Elexon. 「マイクロジェネレーション輸出の決済」(PDF) . 2007年10月9日時点のオリジナル(PDF)からアーカイブ。
- ^ abc Energy Linx (2007). 「MPAN (Meter Point Administration Number)」 . 2007年2月22日閲覧。
- ^ ab Elexon. 「BSCP516 – Balancing and Settlement Code」(PDF) . 2012年3月19日時点のオリジナル(PDF)からアーカイブ。 2011年7月25日閲覧。
- ^ Elexon (2015年6月25日). 「測定等級の変更およびプロファイル等級の変更」(PDF) . 2016年8月17日時点のオリジナル(PDF)からアーカイブ。 2016年7月5日閲覧。
- ^ MRASCo. 「MTCに関するラフガイド」(PDF) . 2016年1月13日時点のオリジナル(PDF)からアーカイブ。 2011年2月5日閲覧。
- ^ Elexon. 「Meter Timeswitch Class table」. 2011年4月26日時点のオリジナルよりアーカイブ。 2011年8月23日閲覧。
- ^ 「線路損失係数クラス」。Elexon用語集。 2013年1月27日閲覧。
- ^ abc 「MPAN(メーターポイント管理番号)」Energylinx . 2023年10月23日閲覧。
- ^ ab Elexon. 「市場参加者の役割」 . 2009年12月20日閲覧。 [リンク切れ]
- ^ 「GSPグループ」エレクソン. 2025年5月20日閲覧。
- ^ Ofgem . 「1989年電気法第11条に基づく通知」(PDF) 。 2005年12月30日時点のオリジナル(PDF)からアーカイブ。 2007年2月22日閲覧。
- ^ Ofgem . 「供給業者を含む全電力免許保有者リスト」 。 2021年9月21日閲覧。
- ^ 「スマート輸出保証(SEG)」Ofgem . 2022年3月4日閲覧。
- ^ 「スマート輸出保証(SEG)の利用規約」(PDF)OVO Energy . 2019年12月23日. 2022年3月4日閲覧。
- ^ 「ELEXON - Codes of Practice」を参照。2007年8月13日時点のオリジナルよりアーカイブ。2008年11月16日閲覧。
- ^ 「変更の実装」。[リンク切れ]
- ^ 「Unmetered Supplies」ELEXON . 2019年1月3日閲覧。
- ^ Power Data Associates Ltd.「メーター管理者」。
- ^ ICTIS (UK) Ltd.「メーター管理者」。
- ^ 「光電制御ユニットアレイ」Power Data Associates . 2022年3月4日閲覧。
- ^ Elexon (2011年12月12日). 「標準決済構成とは何か?」2016年7月5日閲覧。
- ^ St. Clements Services Ltd.「Metering Point Registration System」 。 2008年5月29日閲覧。
- ^ MRASCO. 「ECOESデータへのアクセス」. 2009年7月11日閲覧。
- ^ 「Briefing_Note_on_Customer_Access_NDC_2」(PDF) . ECOES . MRASCO . 2015年6月25日閲覧。
- ^ エネルギー小売協会. 「データ項目定義v1最終版」(PDF) . p. 23. 2007年9月25日時点のオリジナル(PDF)からアーカイブ。 2014年2月25日閲覧。