ポルトガルNIFのチェックディジット計算・検証ツール
このツールは、ポルトガルの納税者識別番号NIFで用いられる標準的なモジュラス11方式により、チェックディジットを計算します。先頭8桁を入力すると9桁目を算出でき、9桁すべてを入力すると末尾の数字が計算結果と一致するか確認できます。結果は常に同じ入力から同じ内容が即座に返るため、入力フォーム、データ移行、会計処理、API検証に適しています。桁数の誤り、数字以外の文字、未対応のモードは、推測や自動修正を行わず明確なエラーとしてお知らせします。
無料で実行
計算と検証のモードを選択します
ポルトガルNIFの先頭8桁があり、最後のチェックディジットを求める場合は計算モードをご利用ください。応答には算出した数字と完成した9桁の値が含まれるため、そのまま後続の検証処理やテストに使用できます。入力元に9桁すべてが含まれている場合は検証モードをご利用ください。先頭8桁と入力された9桁目を分けて期待値を計算し、両者が一致するかを返します。入力値と期待値も個別に返すため、不一致の原因を確認しやすくなっています。入力は数値型ではなく文字列として保持してください。文字列なら先頭のゼロを含むすべての文字がそのまま保たれ、表計算ソフトやプログラミング言語の数値書式によって検証前に識別番号が変わることを防げます。既存の完全なNIFを確認する用途が多いため、既定値は検証モードです。両方の形式を扱う処理では、誤解を避けるためモードを明示的に指定してください。
モジュラス11の計算方法を確認します
アルゴリズムは先頭8桁を左から右へ処理し、9から2まで順に小さくなる重みを掛けます。1桁目には9、2桁目には8を掛け、8桁目に2を掛けるまで続けます。8個の積を合計し、その値を11で割った余りを求めます。余りが0または1ならチェックディジットは0です。それ以外の場合は、11から余りを引いた値がチェックディジットになります。検証時も先頭8桁にまったく同じ計算を行い、結果を9桁目と比較します。この機能は計算前に空白、ピリオド、ハイフン、国コード、ラベルを削除しません。自動整形によって不正な元データが正しく見えたり、前段の項目対応の誤りが隠れたりしないよう、意図的に厳格にしています。0から9までのASCII数字だけを送信してください。ネットワーク、乱数、時計、データベース、地域依存の変換を使用しないため、同じ入力とモードからは常に同じJSON結果が得られます。
結果の意味と適用範囲を理解します
検証結果が真の場合、9桁目は先行する8桁から求めたモジュラス11のチェックサムと整合しています。入力ミス、破損したインポート、不適切な列対応を見つけるための構造検査として役立ちますが、その番号が実際に発行されたこと、現在も有効であること、特定の個人や組織に属することを証明するものではありません。それらの確認には、公的な登録簿や適切な業務上の照会手続きが必要です。また、この計算機は先頭数字に表される可能性のある区分を推測せず、チェックサムだけを検査します。そのため、外部の割当規則が変わっただけで、正しいチェックサムを持つ番号を拒否することはありません。データ処理では、入力エラーと偽の検証結果を区別してください。エラーは型、桁数、文字、モードの不備を示し、偽は正しい形式の9桁を検査したものの末尾が一致しなかったことを示します。APIリクエストは1件$0.002で、同じ決定的な処理をブラウザでも利用できます。
活用例
送信前に税務フォームを確認します
9桁のNIFを入力時に検証し、チェックディジットが一致しない場合は修正箇所が分かるメッセージを表示します。
移行した顧客データを監査します
CSVやシステムの移行後にNIF項目を検証し、欠落、数字の入れ替わり、項目対応の誤りを発見します。
再現可能なテストデータを作成します
請求、インボイス、登録システムの結合テストを準備する際に、8桁の基礎番号から9桁目を計算します。
よくある質問
計算モードには何を入力しますか?
文字列として正確に8桁を入力します。応答には算出したチェックディジットと完成した9桁のNIFが含まれます。
検証モードには何を入力しますか?
末尾のチェックディジットを含む正確な9桁を、文字列として入力します。
チェックサムが正しければ発行済みと証明できますか?
いいえ。入力された9桁目が、先頭8桁から算出したチェックサムと一致することだけを示します。
空白、記号、国コードを含められますか?
いいえ。数字だけを送信してください。不正な元データを暗黙に変更しないよう、書式用の文字は拒否されます。
チェックディジットはどのように計算しますか?
先頭8桁に9から2までの重みを掛けて合計し、11で割ります。余りが0または1なら0、それ以外は11から余りを引いた値です。
APIリクエストの料金はいくらですか?
APIリクエスト1件の料金は$0.002です。簡単なローカル計算にはブラウザでの実行も利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/nif-portugal \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"501964843"}'const res = await fetch("https://api.kit.forhosting.com/enc/nif-portugal", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "501964843"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/nif-portugal",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "501964843"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/nif-portugal", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"501964843"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"501964843"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/nif-portugal", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"number": "501964843"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.nif_portugal",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |