diff --git a/meson.build b/meson.build
index 5a4ec87..37ee2ba 100644
--- a/meson.build
+++ b/meson.build
@@ -402,6 +402,7 @@
     'test/redfish-core/include/utils/ip_utils_test.cpp',
     'test/redfish-core/include/utils/json_utils_test.cpp',
     'test/redfish-core/include/utils/query_param_test.cpp',
+    'test/redfish-core/include/utils/sensor_utils_test.cpp',
     'test/redfish-core/include/utils/stl_utils_test.cpp',
     'test/redfish-core/include/utils/time_utils_test.cpp',
     'test/redfish-core/lib/chassis_test.cpp',
@@ -410,7 +411,6 @@
     'test/redfish-core/lib/manager_diagnostic_data_test.cpp',
     'test/redfish-core/lib/metadata_test.cpp',
     'test/redfish-core/lib/power_subsystem_test.cpp',
-    'test/redfish-core/lib/sensors_test.cpp',
     'test/redfish-core/lib/service_root_test.cpp',
     'test/redfish-core/lib/system_test.cpp',
     'test/redfish-core/lib/thermal_subsystem_test.cpp',
diff --git a/redfish-core/include/utils/sensor_utils.hpp b/redfish-core/include/utils/sensor_utils.hpp
new file mode 100644
index 0000000..49124f2
--- /dev/null
+++ b/redfish-core/include/utils/sensor_utils.hpp
@@ -0,0 +1,45 @@
+#pragma once
+
+#include <algorithm>
+#include <format>
+#include <ranges>
+#include <string>
+#include <string_view>
+#include <utility>
+#include <vector>
+
+namespace redfish
+{
+namespace sensor_utils
+{
+
+inline std::string getSensorId(std::string_view sensorName,
+                               std::string_view sensorType)
+{
+    std::string normalizedType(sensorType);
+    auto remove = std::ranges::remove(normalizedType, '_');
+    normalizedType.erase(std::ranges::begin(remove), normalizedType.end());
+
+    return std::format("{}_{}", normalizedType, sensorName);
+}
+
+inline std::pair<std::string, std::string>
+    splitSensorNameAndType(std::string_view sensorId)
+{
+    size_t index = sensorId.find('_');
+    if (index == std::string::npos)
+    {
+        return std::make_pair<std::string, std::string>("", "");
+    }
+    std::string sensorType{sensorId.substr(0, index)};
+    std::string sensorName{sensorId.substr(index + 1)};
+    // fan_pwm and fan_tach need special handling
+    if (sensorType == "fantach" || sensorType == "fanpwm")
+    {
+        sensorType.insert(3, 1, '_');
+    }
+    return std::make_pair(sensorType, sensorName);
+}
+
+} // namespace sensor_utils
+} // namespace redfish
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 8627194..4d045d0 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -28,6 +28,7 @@
 #include "utils/dbus_utils.hpp"
 #include "utils/json_utils.hpp"
 #include "utils/query_param.hpp"
+#include "utils/sensor_utils.hpp"
 
 #include <boost/system/error_code.hpp>
 #include <boost/url/format.hpp>
@@ -753,14 +754,10 @@
 {
     if (chassisSubNode == sensors::node::sensors)
     {
-        std::string subNodeEscaped(sensorType);
-        auto remove = std::ranges::remove(subNodeEscaped, '_');
-        subNodeEscaped.erase(std::ranges::begin(remove), subNodeEscaped.end());
-
+        std::string subNodeEscaped =
+            redfish::sensor_utils::getSensorId(sensorName, sensorType);
         // For sensors in SensorCollection we set Id instead of MemberId,
         // including power sensors.
-        subNodeEscaped += '_';
-        subNodeEscaped += sensorName;
         sensorJson["Id"] = std::move(subNodeEscaped);
 
         std::string sensorNameEs(sensorName);
@@ -2404,15 +2401,9 @@
                     if (sensorSchema == sensors::node::sensors &&
                         !sensorsAsyncResp->efficientExpand)
                     {
-                        std::string sensorTypeEscaped(sensorType);
-                        auto remove =
-                            std::ranges::remove(sensorTypeEscaped, '_');
-
-                        sensorTypeEscaped.erase(std::ranges::begin(remove),
-                                                sensorTypeEscaped.end());
-                        std::string sensorId(sensorTypeEscaped);
-                        sensorId += "_";
-                        sensorId += sensorName;
+                        std::string sensorId =
+                            redfish::sensor_utils::getSensorId(sensorName,
+                                                               sensorType);
 
                         sensorsAsyncResp->asyncResp->res
                             .jsonValue["@odata.id"] = boost::urls::format(
@@ -2502,14 +2493,9 @@
                         }
                         else if (fieldName == "Members")
                         {
-                            std::string sensorTypeEscaped(sensorType);
-                            auto remove =
-                                std::ranges::remove(sensorTypeEscaped, '_');
-                            sensorTypeEscaped.erase(std::ranges::begin(remove),
-                                                    sensorTypeEscaped.end());
-                            std::string sensorId(sensorTypeEscaped);
-                            sensorId += "_";
-                            sensorId += sensorName;
+                            std::string sensorId =
+                                redfish::sensor_utils::getSensorId(sensorName,
+                                                                   sensorType);
 
                             nlohmann::json::object_t member;
                             member["@odata.id"] = boost::urls::format(
@@ -2661,24 +2647,6 @@
     return false;
 }
 
-inline std::pair<std::string, std::string>
-    splitSensorNameAndType(std::string_view sensorId)
-{
-    size_t index = sensorId.find('_');
-    if (index == std::string::npos)
-    {
-        return std::make_pair<std::string, std::string>("", "");
-    }
-    std::string sensorType{sensorId.substr(0, index)};
-    std::string sensorName{sensorId.substr(index + 1)};
-    // fan_pwm and fan_tach need special handling
-    if (sensorType == "fantach" || sensorType == "fanpwm")
-    {
-        sensorType.insert(3, 1, '_');
-    }
-    return std::make_pair(sensorType, sensorName);
-}
-
 /**
  * @brief Entry point for overriding sensor values of given sensor
  *
@@ -2738,7 +2706,7 @@
         {
             const auto& sensor = item.first;
             std::pair<std::string, std::string> sensorNameType =
-                splitSensorNameAndType(sensor);
+                redfish::sensor_utils::splitSensorNameAndType(sensor);
             if (!findSensorNameUsingSensorPath(sensorNameType.second,
                                                *sensorsList, *sensorNames))
             {
@@ -2778,11 +2746,8 @@
                     messages::internalError(sensorAsyncResp->asyncResp->res);
                     return;
                 }
-                std::string id = path.parent_path().filename();
-                auto remove = std::ranges::remove(id, '_');
-                id.erase(std::ranges::begin(remove), id.end());
-                id += "_";
-                id += sensorName;
+                std::string id = redfish::sensor_utils::getSensorId(
+                    sensorName, path.parent_path().filename());
 
                 const auto& iterator = overrideMap.find(id);
                 if (iterator == overrideMap.end())
@@ -2872,15 +2837,9 @@
             return;
         }
         std::string type = path.parent_path().filename();
-        // fan_tach has an underscore in it, so remove it to "normalize" the
-        // type in the URI
-        auto remove = std::ranges::remove(type, '_');
-        type.erase(std::ranges::begin(remove), type.end());
+        std::string id = redfish::sensor_utils::getSensorId(sensorName, type);
 
         nlohmann::json::object_t member;
-        std::string id = type;
-        id += "_";
-        id += sensorName;
         member["@odata.id"] = boost::urls::format(
             "/redfish/v1/Chassis/{}/{}/{}", chassisId, chassisSubNode, id);
 
@@ -2972,7 +2931,7 @@
         return;
     }
     std::pair<std::string, std::string> nameType =
-        splitSensorNameAndType(sensorId);
+        redfish::sensor_utils::splitSensorNameAndType(sensorId);
     if (nameType.first.empty() || nameType.second.empty())
     {
         messages::resourceNotFound(asyncResp->res, sensorId, "Sensor");
diff --git a/redfish-core/lib/trigger.hpp b/redfish-core/lib/trigger.hpp
index 8bfd632..d405d26 100644
--- a/redfish-core/lib/trigger.hpp
+++ b/redfish-core/lib/trigger.hpp
@@ -6,11 +6,11 @@
 #include "generated/enums/triggers.hpp"
 #include "query.hpp"
 #include "registries/privilege_registry.hpp"
-#include "sensors.hpp"
 #include "utility.hpp"
 #include "utils/collection.hpp"
 #include "utils/dbus_utils.hpp"
 #include "utils/json_utils.hpp"
+#include "utils/sensor_utils.hpp"
 #include "utils/telemetry_utils.hpp"
 #include "utils/time_utils.hpp"
 
@@ -567,7 +567,7 @@
         }
 
         std::pair<std::string, std::string> split =
-            splitSensorNameAndType(sensorName);
+            redfish::sensor_utils::splitSensorNameAndType(sensorName);
         if (split.first.empty() || split.second.empty())
         {
             messages::propertyValueIncorrect(
diff --git a/test/redfish-core/include/utils/sensor_utils_test.cpp b/test/redfish-core/include/utils/sensor_utils_test.cpp
new file mode 100644
index 0000000..b6835cb
--- /dev/null
+++ b/test/redfish-core/include/utils/sensor_utils_test.cpp
@@ -0,0 +1,52 @@
+#include "utils/sensor_utils.hpp"
+
+#include <string>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+namespace redfish::sensor_utils
+{
+namespace
+{
+
+TEST(SplitSensorNameAndType, Type)
+{
+    EXPECT_EQ(splitSensorNameAndType("fantach_foo_1").first, "fan_tach");
+    EXPECT_EQ(splitSensorNameAndType("temperature_foo2").first, "temperature");
+}
+
+TEST(SplitSensorNameAndType, Name)
+{
+    EXPECT_EQ(splitSensorNameAndType("fantach_foo_1").second, "foo_1");
+    EXPECT_EQ(splitSensorNameAndType("temperature_foo2").second, "foo2");
+}
+
+TEST(SplitSensorNameAndType, Error)
+{
+    EXPECT_TRUE(splitSensorNameAndType("fantach").first.empty());
+    EXPECT_TRUE(splitSensorNameAndType("temperature").second.empty());
+}
+
+TEST(GetSensorId, Success)
+{
+    std::string sensorId;
+
+    sensorId = getSensorId("fan0_0", "fan_tach");
+    EXPECT_EQ(sensorId, "fantach_fan0_0");
+
+    sensorId = getSensorId("0_1", "fan_pwm");
+    EXPECT_EQ(sensorId, "fanpwm_0_1");
+
+    sensorId = getSensorId("fan2", "fan_tach");
+    EXPECT_EQ(sensorId, "fantach_fan2");
+
+    sensorId = getSensorId("fan_3", "fan_tach");
+    EXPECT_EQ(sensorId, "fantach_fan_3");
+
+    sensorId = getSensorId("temp2", "temperature");
+    EXPECT_EQ(sensorId, "temperature_temp2");
+}
+
+} // namespace
+} // namespace redfish::sensor_utils
diff --git a/test/redfish-core/lib/sensors_test.cpp b/test/redfish-core/lib/sensors_test.cpp
deleted file mode 100644
index 591b911..0000000
--- a/test/redfish-core/lib/sensors_test.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#include "sensors.hpp"
-
-#include <gmock/gmock.h> // IWYU pragma: keep
-#include <gtest/gtest.h> // IWYU pragma: keep
-
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-// IWYU pragma: no_include "gtest/gtest_pred_impl.h"
-// IWYU pragma: no_include <gmock/gmock-matchers.h>
-// IWYU pragma: no_include <gtest/gtest-matchers.h>
-
-namespace redfish
-{
-namespace
-{
-
-TEST(SplitSensorNameAndType, Type)
-{
-    EXPECT_EQ(splitSensorNameAndType("fantach_foo_1").first, "fan_tach");
-    EXPECT_EQ(splitSensorNameAndType("temperature_foo2").first, "temperature");
-}
-
-TEST(SplitSensorNameAndType, Name)
-{
-    EXPECT_EQ(splitSensorNameAndType("fantach_foo_1").second, "foo_1");
-    EXPECT_EQ(splitSensorNameAndType("temperature_foo2").second, "foo2");
-}
-
-TEST(SplitSensorNameAndType, Error)
-{
-    EXPECT_TRUE(splitSensorNameAndType("fantach").first.empty());
-    EXPECT_TRUE(splitSensorNameAndType("temperature").second.empty());
-}
-
-} // namespace
-} // namespace redfish
