diff --git a/CHANGELOG.md b/CHANGELOG.md
index 059a52375211f8718c193cae490788adf0f6e96d..8c1260cc63f726cdc5844df733b347f3b760294e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@ This file contains the changes applied to the sources of converse<br>
 The current build version of converse is: `v7.0.3dev`<br>
 If the converse sources have to be updated, apply these changes again, or fix them using plugins
 
+### 2024-05-23
+* Return a custom full name for unaffiliated users based on the resource nickname (CRC32 encoded)
+
 ### 2024-05-13
 * Fallback to the resource nickname for unaffiliated users
 
diff --git a/src/conversejs/converse.js b/src/conversejs/converse.js
index 4e16699d5c4283e4e2908ea7f7428829b87d7771..befeef5ceabc48c569edd6f11a18f3f986c9ede7 100644
--- a/src/conversejs/converse.js
+++ b/src/conversejs/converse.js
@@ -87880,8 +87880,7 @@ converse.plugins.add('converse-smacks', {
  */
 
 
-
-
+const crc32=function(r){for(var a,o=[],c=0;c<256;c++){a=c;for(var f=0;f<8;f++)a=1&a?3988292384^a>>>1:a>>>1;o[c]=a}for(var n=-1,t=0;t<r.length;t++)n=n>>>8^o[255&(n^r.charCodeAt(t))];return(-1^n)>>>0};
 
 const {
   Strophe: vcard_Strophe,
@@ -88051,8 +88050,11 @@ converse.plugins.add('converse-vcard', {
       try {
         iq = await core_api.sendIQ(createStanza("get", to));
       } catch (iq) {
+        const resource = vcard_Strophe.getResourceFromJid(jid);
+        const code = crc32(resource).toString(16).toUpperCase();
+        const deleted_user_fullname = core_api.settings.get('i18n') === 'fr' ? 'Utilisateur supprimé %1' : 'Deleted user %1';
         return {
-          'fullname': vcard_Strophe.getResourceFromJid(jid),
+          'fullname': resource ? deleted_user_fullname.replace('%1', code) : '',
           'stanza': iq,
           'jid': jid,
           'vcard_error': new Date().toISOString()