diff --git a/include/submessages.h b/include/submessages.h
index 2daee9c2975ad3877df3c5ccdb2ca1ec12e11b79..be1cd5a17527fbedd0dd0a646b802b3b47f385fb 100644
--- a/include/submessages.h
+++ b/include/submessages.h
@@ -40,7 +40,9 @@ class SubMessage{
 
 		unsigned char* getData(); //Retorna os dados
 
-		unsigned char* objToString();
+		unsigned char* objToString(); //Transforma o objeto submessage numa string
 
-		void stringToObj(unsigned char*);
+		void stringToObj(unsigned char*); //Transforma uma string num objeto submessage
+
+		int checkParity(); // É diferente de 0 caso a paridade esteja errada
 };
diff --git a/src/submessages.cpp b/src/submessages.cpp
index 05d70f658f998d53ce2fde83a7b56258bb6793c5..6489dcc4d270a73ca377bac06bed155971a7bfc7 100644
--- a/src/submessages.cpp
+++ b/src/submessages.cpp
@@ -128,3 +128,42 @@ void SubMessage::stringToObj(unsigned char* string){
   // Passagem da paridade.
   parity = string[size+3];
 }
+
+int SubMessage::checkParity(){
+  int **bitsMessage;
+  int i, j, bitsParity[8];
+  unsigned char parityTest;
+
+  // Alocação da matriz de bits
+  bitsMessage = new int*[this->getSize()];
+  for(i = 0 ; i < this->getSize() ; i++){
+    bitsMessage[i] = new int[8];
+    // Divide os dados em bits
+    for(j = 0 ; j < 8 ; j++){
+      bitsMessage[i][j] = ((data[i] >> (7-j)) & 0x01);
+    }
+  }
+
+  // Soma os bits verticalmente
+  for(j = 0 ; j < 8 ; j++){
+    bitsParity[j] = 0;
+    for(i = 0 ; i < this->getSize() ; i++){
+      bitsParity[j] = bitsParity[j] + bitsMessage[i][j];
+    }
+    // Caso a soma vertical de uma coluna for par, bitsParity recebe 1,
+    // caso contrario ele recebe 0.
+    if((bitsParity[j] % 2) == 0){
+      bitsParity[j] = 1;
+    }else{
+      bitsParity[j] = 0;
+    }
+    // Atribui os bits para parity (variável de paridade do objeto)
+    parityTest = (parityTest << 1) | bitsParity[j];
+  }
+
+  if (parityTest == parity){
+    return 1;
+  }else{
+    return 0;
+  }
+}