diff --git a/duniterpy/documents/identity.py b/duniterpy/documents/identity.py
index a526d9bd0595ac44b0e4f0d3fbffb290b5a9f61a..493183cf79eb92f0c46c9580d7aea0fcddbf386b 100644
--- a/duniterpy/documents/identity.py
+++ b/duniterpy/documents/identity.py
@@ -14,7 +14,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import re
-from typing import Type, TypeVar
+from typing import Any, Type, TypeVar
 
 from ..constants import (
     BLOCK_ID_REGEX,
@@ -96,6 +96,31 @@ class Identity(Document):
         if signing_key is not None:
             self.sign(signing_key)
 
+    def __eq__(self, other: Any) -> bool:
+        """
+        Check Identity instances equality
+        """
+        if not isinstance(other, Identity):
+            return NotImplemented
+        return (
+            super().__eq__(other)
+            and self.pubkey == other.pubkey
+            and self.uid == other.uid
+            and self.block_id == other.block_id
+        )
+
+    def __hash__(self) -> int:
+        return hash(
+            (
+                self.pubkey,
+                self.uid,
+                self.block_id,
+                self.version,
+                self.currency,
+                self.signature,
+            )
+        )
+
     @classmethod
     def from_inline(
         cls: Type[IdentityType],
diff --git a/tests/documents/test_identity.py b/tests/documents/test_identity.py
new file mode 100644
index 0000000000000000000000000000000000000000..46bb9145901903da1c02167afb65580cf60b1d0a
--- /dev/null
+++ b/tests/documents/test_identity.py
@@ -0,0 +1,47 @@
+# Copyright  2014-2021 Vincent Texier <vit@free.fr>
+#
+# DuniterPy is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# DuniterPy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import pytest
+
+from duniterpy.constants import G1_TEST_CURRENCY_CODENAME
+from duniterpy.documents import Identity
+
+PUBKEY = "A"
+UID = "test"
+BLOCK_ID = "0-NRSATU"
+IDENTITY_KWARGS = [PUBKEY, UID, BLOCK_ID]
+
+
+def test_identity_equality():
+    idty1 = Identity(*IDENTITY_KWARGS)
+    idty2 = Identity(*IDENTITY_KWARGS)
+    assert idty1 == idty2
+
+
+@pytest.mark.parametrize(
+    "pubkey, uid, block_id, currency",
+    [
+        ("pubkey", UID, BLOCK_ID, None),
+        (PUBKEY, "uid", BLOCK_ID, None),
+        (PUBKEY, UID, "1-TEST", None),
+        IDENTITY_KWARGS + [G1_TEST_CURRENCY_CODENAME],
+    ],
+)
+def test_identity_inequality(pubkey, uid, block_id, currency):
+    idty1 = Identity(*IDENTITY_KWARGS)
+    idty2 = Identity(pubkey, uid, block_id)
+    if currency:
+        idty2.currency = currency
+    assert not idty1 == idty2